2009-11-03 123 views
2

我需要重命名Oracle數據庫中的約束,但在設計時我不知道舊名稱。如何在不知名的情況下重新命名約束

我想這樣做是這樣的:

declare 
    vOldName string; 
begin 
    select CONSTRAINT_NAME 
    into vOldName 
    from user_constraints 
    where TABLE_NAME='AGREEMENT' and CONSTRAINT_TYPE='R'; 

    alter table Agreement rename constraint vOldName to AGREEMENT_FK1; 
end; 

,但我得到錯誤信息「PLS-00103:出現符號‘ALTER’在需要下列之一時:開始的情況下」。

我該如何解決這個問題?

回答

4

使用動態PL/SQL:

declare 
    vOldName user_constraints.constraint_name%TYPE; 
begin 
    select CONSTRAINT_NAME 
    into vOldName 
    from user_constraints 
    where TABLE_NAME='AGREEMENT' and CONSTRAINT_TYPE='R'; 

    execute immediate 'alter table Agreement rename constraint ' 
     || vOldName || ' to AGREEMENT_FK1'; 
end; 
+0

很好,謝謝!像魅力一樣工作。不得不聲明vOldName爲varchar,而不是字符串,但那是我自己的錯誤:-) – 2009-11-03 16:38:11

+0

我會在我的回答中解決這個問題 – 2009-11-03 16:40:13

+2

另外,讓我藉此oppurtunity說出BLOODY AWESOME Stack Overflow是如何。我在兩分鐘之內回答了我的問題!難以置信。它讓我從一個多小時的網絡挖掘中解救出來。 – 2009-11-03 16:40:55

相關問題