如何使用存储过程设置NEW触发器值



如何使用存储过程设置NEW触发器值?例如,BEFORE INSERT ON myTable,我想设置myTable的NEW值。someecoluml到一个给定的值。当尝试这样做时,在尝试创建过程时得到一个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 -未知系统变量' someecoln '

编辑。下面的命令可以工作。

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 ;

你不可能完全按照你开始的方式去做。但是,您可以通过让存储过程只给您一个值,然后在触发器中使用这个值来实现您正在寻找的东西:

delimiter //
CREATE PROCEDURE myProc (OUT param1 INT)
 BEGIN
   SET @value = 123;
 END//
delimiter ;
然后你可以让你的触发器调用存储过程并使用它的value:
CREATE TRIGGER myTrig BEFORE INSERT ON myTable FOR EACH ROW
 BEGIN
    CALL myProc(@columnValue);
    SET NEW.someColumn = @columnValue;
END$$

我还没有测试过,只是凭脑子输入而已。如果不行,请让我知道,我会修改我的答案。

同时,让我知道,如果这不是你想要的,或者不够完整,我会修改我的答案。

(注。我不知道为什么有人认为这不是一个好问题。

最新更新