我有一個啟用 ORDS 的架構,它接受批量 JSON 記錄并將它們一一拆分,然后將它們一一插入 UEM 表中。
我試圖創建一個觸發器,它獲取最后插入的行的 id 并使用該值插入到另一個表中。問題是,下面的觸發器只獲取并插入最后插入的行的 id,并且只執行 1 次插入。
更具體地說:
ORDS 獲取包含 4 條記錄的批量 JSON 有效負載。
POST 處理程式啟動一個程序,該程序按換行符拆分這 4 條記錄,并立即使用“按級別連接”將這些記錄作為 4 個單獨的行插入到 UEM 表的 CLOB 列中。還有自動創建和遞增的 ID 列。
在并行中,我還想獲取這些行的 ID 并在另一個表插入中使用它。我在下面創建了復合觸發器,但是這個觸發器只檢索最后一條記錄的 ID,并且只插入一行。
你認為它為什么會這樣?最后,程式“插入”了4條記錄。
CREATE OR REPLACE TRIGGER TEST_TRIGGER5
FOR INSERT ON UEM
COMPOUND TRIGGER
lastid NUMBER;
AFTER STATEMENT IS
BEGIN
SELECT MAX(ID) INTO lastid FROM UEM;
INSERT INTO SPRINT1 (tenantid, usersessionid, newuser, totalerrorcount, userid) VALUES ('deneme', 'testsessionid', 'yes', lastid, 'asdasfqwqwe');
END AFTER STATEMENT;
END TEST_TRIGGER5;
uj5u.com熱心網友回復:
為什么?因為它是陳述句級觸發器。如果你希望它火的每一行,你-很明顯-使用行級具有觸發
for each row
條款。
uj5u.com熱心網友回復:
使用“按級別連接”將這些作為 4 個單獨的行插入到 UEM 表的 CLOB 列中。
您有 1 個INSERT插入 4 行的陳述句。
- 在并行中,我還想獲取這些行的 ID 并在另一個表插入中使用它。我在下面創建了復合觸發器,但是這個觸發器只檢索最后一條記錄的 ID,并且只插入一行。
你認為它為什么會這樣?最后,程式“插入”了4條記錄。
它可能插入了 4 個ROWS,但只有 1 個STATEMENT并且您正在使用AFTER STATEMENT觸發器。如果您希望它為每一行運行,那么您需要使用行級觸發器。
CREATE OR REPLACE TRIGGER TEST_TRIGGER5
AFTER INSERT ON UEM
FOR EACH ROW
BEGIN
INSERT INTO SPRINT1 (tenantid, usersessionid, newuser, totalerrorcount, userid)
VALUES ('deneme', 'testsessionid', 'yes', :NEW.id, 'asdasfqwqwe');
END TEST_TRIGGER5;
/
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365852.html
