正如标题所示,我需要重命名一个名为 sys_ 000545 的主键约束,索引名称也具有相同的名称。我怎样才能在oracle pl/sql 中实现这一点?名字是随机的。
我尝试将 alter index 与选择索引名称的子查询一起使用,但 Oracle 不允许这样做。
编辑我需要此重命名作为更新脚本的一部分
SQL> create table test (id number primary key);
Table created.
SQL> select constraint_name from user_constraints where table_name = 'TEST';
CONSTRAINT_NAME
------------------------------
SYS_C009641
SQL> alter table test rename constraint sys_c009641 to pk_test;
Table altered.
SQL> select constraint_name from user_constraints where table_name = 'TEST';
CONSTRAINT_NAME
------------------------------
PK_TEST
SQL>
Run Code Online (Sandbox Code Playgroud)
SQL> select index_name from user_indexes where table_name = 'TEST';
INDEX_NAME
------------------------------
SYS_C009641
SQL> alter index sys_c009641 rename to pk_test;
Index altered.
SQL> select index_name from user_indexes where table_name = 'TEST';
INDEX_NAME
------------------------------
PK_TEST
SQL>
Run Code Online (Sandbox Code Playgroud)
[编辑:脚本需要动态 SQL]
SQL> drop table test;
Table dropped.
SQL> create table test (id number primary key);
Table created.
SQL> select constraint_name from user_constraints where table_name = 'TEST';
CONSTRAINT_NAME
------------------------------
SYS_C009643
SQL> declare
2 l_table_name user_tables.table_name%type := 'TEST';
3 l_pk user_constraints.constraint_name%type;
4 begin
5 select constraint_name
6 into l_pk
7 from user_constraints
8 where table_name = l_table_name
9 and constraint_type = 'P';
10
11 execute immediate 'alter table ' || l_table_name || ' rename constraint ' ||
12 l_pk || ' to pk_' || l_table_name;
13 end;
14 /
PL/SQL procedure successfully completed.
SQL> select constraint_name from user_constraints where table_name = 'TEST';
CONSTRAINT_NAME
------------------------------
PK_TEST
SQL>
Run Code Online (Sandbox Code Playgroud)