0

ストアド プロシージャを使用して NEW トリガー値を設定するにはどうすればよいですか? たとえば、myTable に挿入する前に、myTable.someColumn の NEW 値を特定の値に設定したいと考えています。そうしようとすると、プロシージャを作成しようとすると 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 ;
4

1 に答える 1

4

開始したとおりに正確に行うことはできません。ただし、ストアド プロシージャで値を指定し、その値をトリガー内で使用することで、探しているものを実現できる場合があります。

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$$

私はそれをテストしていません。頭から直接入力するだけです。うまくいかない場合はお知らせください。回答を修正します。

また、これがあなたが探していたものではない場合、または十分に完了していない場合はお知らせください。回答を修正します。

(psなぜ誰かがこれが良い質問ではないと思ったのかわかりません。)

于 2013-04-18T15:10:28.730 に答える