我正在研究postgres,我會知道是否有一個簡單的方法來執行裏面觸發調用查詢,而無需再次寫入觸發器內。我自己解釋一下。 我有一個表上的INSERT查詢和執行BEFORE INSERT的觸發器。如果一個條件被驗證,那麼我會執行查詢而不會在觸發器內重寫它(使用NEW變量)。觸發器:執行查詢,如果條件被驗證觸發它
1
A
回答
1
如果我正確理解你的問題,請嘗試:
IF (condition) THEN
RETURN new;
ELSE
-- statements
END IF;
奧斯瓦爾多
0
那麼這取決於你有什麼查詢,但你cound使用功能和寫裏面查詢:
create table test (number int);
CREATE OR REPLACE FUNCTION fn_test_insert("number" integer)
RETURNS void AS
$BODY$
insert into test (number) -- this is your insert query
select $1
$BODY$
LANGUAGE sql;
CREATE OR REPLACE FUNCTION tr_fn_test_insert()
RETURNS trigger AS
$BODY$
begin
perform fn_test_insert(new.number + 1); -- calling your insert query with new + 1
return new; -- as example
end
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER tr_test_insert
AFTER INSERT
ON test
FOR EACH ROW
WHEN ((new.number < 10))
EXECUTE PROCEDURE tr_fn_test_insert();
select fn_test_insert(1);
+0
在觸發器內寫入查詢是我會避免的! – giozh
+0
我正在使用SQL Server和用戶Postgres只是爲了好玩。你爲什麼要避免這種情況? –
+0
在這種情況下,我沒有看到任何錯誤,因爲你只是插入到表中。然而,當人們在觸發器中進行了大量複雜的查詢時,他們遇到了有趣的問題,性能明顯。請記住,觸發器查詢每行運行一次,因此如果您不小心,可能會遇到非常複雜的性能問題。 –
相關問題
- 1. 何時執行身份驗證詢問觸發器?
- 2. 如果條件不觸發
- 3. 如果條件不觸發
- 4. 如果觸發條件
- 5. 觸發不檢查,如果條件
- 6. 一旦UpdatePanel觸發器被觸發,就立即執行Javascript
- 7. 如何避免在回發時觸發驗證觸發器
- 8. 帶觸發條件的MySQL觸發器
- 9. Firebase查詢未被觸發
- 10. 如果條件存在MySQL觸發器
- 11. StackOverflow驗證碼觸發器
- 12. 刪除觸發器不被執行
- 13. cakephp - 觸發 - 查詢執行後
- 14. 觸發停止執行SQl查詢
- 15. jQuery驗證submitHandler觸發器驗證
- 16. OmniAuth觸發驗證
- 17. 觸發執行
- 18. SQL觸發器。我如何給觸發器查詢「變量」?
- 19. 查詢過程觸發器觸發期間/之後觸發選擇觸發器是否觸發?
- 20. 觸發器執行插入
- 21. 觸發器執行順序
- 22. Django表單驗證沒有被觸發
- 23. 驗證屬性被觸發兩次
- 24. MVC3遠程驗證沒有被觸發?
- 25. MySQL的插入查詢,如果條件插入觸發
- 26. 觸發器執行檢查存儲庫
- 27. 觸發條件
- 28. 條件觸發
- 29. 事件觸發條件觸發
- 30. MySQL觸發器沒有被觸發?
您可能想要返回NULL(跳過行)或RAISE EXCEPTION中止ELSE語句中的事務。 –