[英]How to clone special root in a table with tree-like structure in oracle?
我有一個與自身具有一對多關系的表。 現在我想克隆一個分支並將其移動到其他根目錄下。 我的意思是
到目前為止,我已經嘗試過:
INSERT INTO MY_TABLE (ID,
CODE,
NAME,
PARENT)
SELECT MY_TABLE_SEC.NEXTVAL,
E.CODE,
E.NAME,
NVL (NULLIF (E.PARENT, TO_NUMBER ( :OLDPARENT)),
TO_NUMBER ( :NEWPARENT))
FROM MY_TABLE E
WHERE E.ID != :OLDPARENT
CONNECT BY NOCYCLE PRIOR E.ID = E.PARENT
START WITH E.ID = :OLDPARENT
但正如您可能意識到的那樣,它只復制第一個級別並復制其他級別。 我該怎么辦?
INSERT INTO MY_TABLE (ID,
CODE,
NAME,
PARENT)
SELECT NEW_ID, CODE, NAME, NVL(PRIOR NEW_ID, :NEWPARENT)
FROM (
SELECT A.*, MY_TABLE_SEC.NEXTVAL NEW_ID
FROM MY_TABLE A
START WITH PARENT=:OLDPARENT
CONNECT BY NOCYCLE PRIOR ID = PARENT
) A
START WITH PARENT=:OLDPARENT
CONNECT BY NOCYCLE PRIOR ID = PARENT
編輯:我再添加一個級別以防止錯誤“此處不允許使用序列”
INSERT INTO MY_TABLE (ID,
CODE,
NAME,
PARENT)
SELECT NEW_ID, CODE, NAME, NVL(PRIOR NEW_ID, :NEWPARENT)
FROM (
SELECT A.*, MY_TABLE_SEC.NEXTVAL NEW_ID
FROM
(
SELECT A.*
FROM MY_TABLE A
START WITH PARENT=:OLDPARENT
CONNECT BY NOCYCLE PRIOR ID = PARENT
)
) A
START WITH PARENT=:OLDPARENT
CONNECT BY NOCYCLE PRIOR ID = PARENT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.