【发布时间】:2013-04-18 12:25:41
【问题描述】:
如何使用存储过程设置新的触发器值?例如,在插入 myTable 之前,我想将 myTable.someColumn 的新值设置为给定值。尝试这样做时,我在尝试创建过程时收到 1193 错误。谢谢
DELIMITER $$
CREATE PROCEDURE `myProc` ()
BEGIN
//How do I set NEW.someColumn of myTable?
SET NEW.someColumn=123;
END$$
CREATE TRIGGER myTrig BEFORE INSERT ON myTable FOR EACH ROW
BEGIN
//SET NEW.someColumn=123; //This works, but I want to do the setting within the stored procedure
CALL myProc();
END$$
DELIMITER ;
INSERT INTO myTable(id,data) VALUES (1,"hello");
//Above "should" really do INSERT INTO myTable(id,data,someColumn) VALUES (1,"hello",123);
1193 - 未知系统变量“someColumn”
编辑。以下将起作用。
DELIMITER $$
CREATE PROCEDURE `myProc` (INOUT myID int)
BEGIN
SET myID =123;
END$$
CREATE TRIGGER myTrig BEFORE INSERT ON myTable FOR EACH ROW
BEGIN
CALL myProc(NEW.someColumn);
END$$
DELIMITER ;
【问题讨论】:
-
请告诉我为什么这是一个如此可怕的问题。
-
我能够通过将 NEW.someColumn 从触发器传递到过程并使用
CREATE PROCEDURE myProc (INOUT myID int)来使其工作 -
3 次反对票和 2 次关闭,我显然问错了什么。请告诉我它是什么。
标签: mysql sql stored-procedures triggers