1
我希望MySQL觸發器自動執行某些操作,而不是將它放在應用程序邏輯中。如何讓這個SQL觸發器不返回結果而工作?
該方法大致是這樣的。
CREATE TRIGGER InsertAction AFTER INSERT
ON UserAction
FOR EACH ROW CALL CreateAutomaticResponse(...);
其中採用
CREATE PROCEDURE CreateAutomaticResponse (...)
INSERT INTO SomeTable (foo, bar)
VALUES
(
SELECT x FROM SomeTable ...
...
)
現在,這將創建一個錯誤
ERROR 1093 (HY000) at line 1675: You can't specify target table 'SomeTable' for update in FROM clause
我認爲解決的辦法是做這樣的事情
SELECT @tmp := x FROM SomeTable ...
INSERT INTO SomeTable (foo, bar) VALUES (@tmp, ...)
的麻煩,這是我然後得到
ERROR 1415 (0A000) at line 1666: Not allowed to return a result set from a trigger
它似乎是導致此行的SELECT @tmp := ...
行。
就我而言,儘管有SELECT
,但這個過程並沒有返回任何東西,因爲它只是選擇一個臨時變量。
我可以告訴MySQL認爲程序沒有返回任何東西嗎?或以其他方式解決此問題
你試過'INSERT INTO sometable(FOO,吧) SELECT X,Y FROM sometable' – artm
'你不能修改您在SELECT part'使用相同的表。你在'INSERT'語句中顯然是這樣做的。解決方法是不要使用嵌套的子查詢並在不同的部分執行它......在另一個說明中,第二個錯誤「不允許從觸發器返回結果集」顯然是因爲你不能執行'SELECT'語句觸發。如果你想設置變量,使用'SELECT INTO' ...另外,我想說的很好的問題! – Codexer