Как переименовать сгенерированное системой имя ограничения и индекс первичного ключа - PullRequest
0 голосов
/ 19 декабря 2018

Как видно из заголовка, мне нужно переименовать ограничение первичного ключа с именем sys_ 000545 и таким же именем для имени индекса.Как я могу достичь этого в оракуле PL / SQL.Имя является случайным.

Я пытался использовать alter index с подзапросом, который выбирает имя индекса, но oracle не позволяет этого.

EDIT Мне нужно это переименование как часть сценария обновления

1 Ответ

0 голосов
/ 19 декабря 2018
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>

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>

[РЕДАКТИРОВАТЬ: сценарию требуется динамический 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>
...