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; 开发者_StackOverflow中文版
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?
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;
精彩评论