我有两张桌子,父母和孩子。 Parent拥有Child的外键。
我正在编写一个脚本,将 n 记录插入Child,我需要将新生成的主键从 n 子记录返回到临时表。另外,它需要存储Parent.Parent_Key,以便我可以将它用作稍后的查找(我可以在连接到Parent中获得)。
当我将 m 记录插入Parent时,我打算使用临时表,所有这些都在一次提交中。临时表基本上是一个查找表。
重新解释问题: 已填充父表和子表。为简单起见,让我们说Parent有主键Parent.Parent_key和外键Child.Child_key。 Child具有主键Child_key和Child_name属性。我试图插入重复的子行(用于修复),抓住那些新的child_keys,将它们与parent_key配对到临时表中,以便我可以将它用作查找。
以下是Child的插入查询因语法错误而无法正常工作 - 这种方法在ORACLE SQL中是否可行?
CREATE GLOBAL TEMPORARY TABLE DUPLICATE_CHILD (
PARENT_KEY int,
CHILD_KEY int);
INSERT INTO CHILD (CHILD_NAME)
SELECT
c.CHILD_NAME
FROM
CHILD c
JOIN PARENT p
ON p.CHILD_KEY = c.CHILD_KEY
RETURNING p.PARENT_KEY, c.CHILD_KEY BULK COLLECT INTO DUPLICATE_CHILD;
答案 0 :(得分:1)
您是否可以撤销操作顺序?
将CHILD_NAME添加到DUPLICATE_CHILD,然后:
插入DUPLICATE_CHILD
INSERT INTO DUPLICATE_CHILD (PARENT_KEY, CHILD_KEY, CHILD_NAME)
SELECT PARENT_KEY, (SELECT NVL(MAX(CHILD_KEY), 0) FROM CHILD) + ROWNUM, C.CHILD_NAME
FROM
CHILD C
JOIN PARENT P
ON P.CHILD_KEY = C.CHILD_KEY
使用生成的密钥
插入CHILD
INSERT INTO CHILD (CHILD_KEY, CHILD_NAME)
SELECT CHILD_KEY, CHILD_NAME FROM DUPLICATE_CHILD;
commit;