2009-11-03 81 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

相关问题