直接在user_constraint表中重命名Oracle约束的任何问题?

wad*_*rld 1 oracle plsql oracle10g

使用Oracle 10g,我需要重命名一堆FK约束,这些约束都以LITE结尾以包含FK前缀.

我的想法是(我确保所有名称都足够短以容纳前缀):

DECLARE
  v_name VARCHAR2(30 BYTE);
  v_new_name VARCHAR2(30 BYTE);
  CURSOR c1 is select CONSTRAINT name from user_constraints where constraint_type = 'R' and constraint_name like '%_LITE';
BEGIN
   OPEN c1;
   LOOP
      FETCH c1 into v_name;
      EXIT when c1%NOTFOUND;
      v_new_name:= 'FK_' || v_name;
      update user_constraints SET constraint_name = v_new_name where constraint_name = v_name;
   END LOOP;
   close c1;
END;
Run Code Online (Sandbox Code Playgroud)

任何原因导致不安全,我应该创建alter table语句?

Eri*_*ler 7

USER_CONSTRAINTS是一个视图,您不能以普通用户身份进行更新.编辑:即使SYS不能这样做,对数据字典进行更新对我来说似乎是一个非常糟糕的主意.

更好地使用ALTER TABLE xxx RENAME CONSTRAINT yyy to zzz;