gpt4 book ai didi

mysql - 如何使用存储过程设置新触发器值?

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:47 25 4
gpt4 key购买 nike

如何使用存储过程设置新触发器值?例如,在 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 - Unknown system variable '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 ;

最佳答案

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

delimiter //

CREATE PROCEDURE myProc (OUT param1 INT)
BEGIN
SET @value = 123;
END//

delimiter ;

然后您可以让触发器调用存储过程并使用它的值:

CREATE TRIGGER myTrig BEFORE INSERT ON myTable FOR EACH ROW
BEGIN
CALL myProc(@columnValue);
SET NEW.someColumn = @columnValue;
END$$

我还没有测试过,只是直接从我的脑海中输入。如果它不起作用,请告诉我,我会修改我的答案。

另外,如果这不是您要找的,或者不够完整,请告诉我,我会修改我的答案。

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

关于mysql - 如何使用存储过程设置新触发器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com