当我不知道名称时如何重命名约束

Sve*_*sli 2 sql oracle constraints

我需要重命名 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;
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息“PLS-00103:在预期以下情况之一时遇到符号“ALTER”:开始案例“。

我该如何解决这个问题?

Ton*_*ews 5

使用动态 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;
Run Code Online (Sandbox Code Playgroud)

  • 另外,让我借此机会说一下 BLOODY AWESOME Stack Overflow 是多么棒。我在两分钟内得到了我的问题的答案!!极好的。它使我免于进行_许多_小时的网络挖掘。 (2认同)