【发布时间】:2022-01-10 07:38:43
【问题描述】:
我有一个以下格式的复合触发器。我需要确保我的自定义声明 ints_rows 只采用“唯一行”。意思是如果ints_rows 已经有一个类似于正在插入的记录,它应该忽略它。更像是一个 SET 数据结构。我如何在甲骨文中做到这一点? (我对 oracle 很陌生,因此我不擅长语法)我认为我必须更改 BULK COLLECT 语句或 int_records 的声明,但我可能错了。非常感谢任何帮助/提示。
这是我的复合触发代码。
CREATE OR REPLACE
TRIGGER MY_COMPOUND_TRIGGER
FOR UPDATE OF some_random_column ON some_random_table
COMPOUND TRIGGER
TYPE int_records IS RECORD (
column_one another_table.column_one%TYPE,
column_two another_table.column_two%TYPE
);
TYPE row_list IS TABLE OF int_records INDEX BY simple_integer;
ints_rows row_list;
BEFORE STATEMENT IS
BEGIN
ints_rows.delete;
END BEFORE STATEMENT;
AFTER EACH ROW IS
BEGIN
SELECT column_one, column_two BULK COLLECT INTO ints_rows
FROM some_table_x WHERE some_col_id=:OLD.some_col_id;
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
FOR i IN 1 .. ints_rows.COUNT LOOP
-- DO SOMETHING
END LOOP;
auctions_rows.delete;
END AFTER STATEMENT;
END;
此语句根本不应该重复。
SELECT column_one, column_two BULK COLLECT INTO ints_rows
FROM some_table_x WHERE some_col_id=:OLD.some_col_id;
【问题讨论】:
标签: database oracle stored-procedures plsql triggers