簡體   English   中英

如何在oracle中具有樹狀結構的表中克隆特殊根?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM