如何在触发器 (Oracle) 的帮助下将现有记录从父表移动到新创建的子表?



我想创建一个触发器,其中子表从父表中提取所有现有记录。

我创建了将父表主键引用为新表中外键的子表

CREATE OR REPLACE TRIGGER trigger name
AFTER INSERT ON table_name(parent_table)
FOR EACH ROW 
BEGIN 
insert statement for child table;
END;

上面的触发器是为将插入子表创建的记录创建的,我想将所有旧记录(在创建子表之前存在(推送到新的子表。触发器是否有助于提取所有旧记录?

显然没有!!

trigger将在创建父表后开始将记录插入子表trigger。在创建trigger之前插入到父表中的记录需要手动插入。

如果要在创建trigger之前从父表拉取所有记录到子表中,则需要编写一次性INSERT查询,如下所示:

INSERT INTO CHILD_TABLE
SELECT * FROM PARENT_TABLE P 
WHERE NOT EXISTS (SELECT 1 FROM CHILD_TABLE C WHERE P.PK = C.FK);

--或--

INSERT INTO CHILD_TABLE
SELECT * FROM PARENT_TABLE P 
WHERE P.PK IN 
(SELECT PK FROM PARENT_TABLE
MINUS
SELECT FK FROM CHILD_TABLE
)

干杯!!

相关内容

最新更新