sql - 如何重命名系统生成的约束名称和主键索引
问题描述
正如标题所说,我需要重命名一个名为 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>
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>
推荐阅读
- python - 使用 Python 的 Selenium 抓取 Trulia
- bash - Jenkins 中的 Shell 脚本
- javascript - 使用时刻按“今天”和“明天”过滤数组
- javascript - 第二次运行时 VScode 扩展清理诊断收集
- windows - 试图将简单的 curl 命令转换为 invoke-webrequest 但不工作
- mql4 - 特定时间范围内的矩形不会在较低时间范围内延伸
- java - 获取错误导致崩溃循环弹性搜索(GCE/kubernetes)
- java - 为什么我的 GUI 中没有变量打印?
- javascript - 尝试用 laravel 实现评论系统
- python - Dask/Pandas 是否支持基于依赖于其他行的复杂条件删除组中的行?