【发布时间】:2010-11-20 08:18:16
【问题描述】:
我正在使用 MySQL 5.1.3 并使用 PHPMyAdmin 3.1.3.1 来访问它。使用 PHP 作为服务器端脚本语言。我的问题是,我们能否从 Trigger 语句中调用存储过程或函数,以便在调用 INSERT|UPDATE|DELETE 触发器时,它会根据定义的逻辑调用 SP 来更新其他一些表。
【问题讨论】:
标签: mysql sql stored-procedures triggers
我正在使用 MySQL 5.1.3 并使用 PHPMyAdmin 3.1.3.1 来访问它。使用 PHP 作为服务器端脚本语言。我的问题是,我们能否从 Trigger 语句中调用存储过程或函数,以便在调用 INSERT|UPDATE|DELETE 触发器时,它会根据定义的逻辑调用 SP 来更新其他一些表。
【问题讨论】:
标签: mysql sql stored-procedures triggers
mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
-> FOR EACH ROW
-> BEGIN
-> IF NEW.amount < 0 THEN
-> SET NEW.amount = 0;
-> ELSEIF NEW.amount > 100 THEN
-> SET NEW.amount = 100;
-> END IF;
-> END;//
mysql> delimiter;
单独定义一个存储过程然后使用简单的CALL 语句从触发器调用它会更容易。如果您想从多个触发器中调用相同的例程,这也是有利的。
触发器在激活时执行的语句中可以出现的内容有一些限制:
触发器不能使用CALL 语句来调用向客户端返回数据或使用动态SQL 的存储过程。 (允许存储过程通过OUT或INOUT参数向触发器返回数据。)
触发器不能使用显式或隐式开始或结束事务的语句,例如 START TRANSACTION、COMMIT 或 ROLLBACK。
【讨论】: