Sql – How to rename a constraint when I don’t know the name

constraintsoraclesql

I need to rename a constraint in an Oracle databse, but I don't know the old name at design-time.

What I would like to do is this:

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;

but I get the error message "PLS-00103: Encountered the symbol "ALTER" when expecting one of the following: begin case ".

How do I solve this problem?

Best Solution

Use dynamic 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;
Related Question