将索引名称导出为 ddl 时重命名它们

Posted

技术标签:

【中文标题】将索引名称导出为 ddl 时重命名它们【英文标题】:renaming index names while exporting them as ddl 【发布时间】:2014-03-24 19:00:07 【问题描述】:

在当前现有模式中,大多数索引/约束名称是由 oracle 生成的,例如 SYS_CXXXXX,我正在尝试将它们导出为 DDL 语句,这里我需要用 PK_(tablename) 或 PK_(tablename)1 替换系统生成的名称.谢谢

【问题讨论】:

你试过什么?你有没有研究过如何做到这一点? 确实尝试过这个 spool create_indexes.sql SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) DDL FROM USER_INDEXES u;脱线;有了这个我在创建脚本中获取现有的索引名称,而不是我试图用可以很容易识别的名称替换 【参考方案1】:

您可以使用 ALTER 命令的 RENAME 选项来重命名约束/索引:

SQL> create table t (x int primary key);

SQL> select constraint_name from user_constraints
  2  where table_name = 'T';

CONSTRAINT_NAME                                                                 
----------------------
SYS_C0010667                                                                    

SQL> alter table t rename constraint sys_c0010667 to t_pk;


SQL> select constraint_name from user_constraints
  2  where table_name = 'T';

CONSTRAINT_NAME                                                                 
----------------------
T_PK                                                                            

SQL> select index_name from user_indexes where table_name = 'T';

INDEX_NAME                                                                      
----------------------
SYS_C0010667                                                                    

SQL> alter index sys_c0010667 rename to t_pk;

Индекс изменен.

SQL> select index_name from user_indexes where table_name = 'T';

INDEX_NAME                                                                      
----------------------
T_PK    

【讨论】:

感谢 dmitry,如果我们需要更改现有的 schmema,这可能会奏效。但在这里我正在尝试创建 schmea 导出脚本。此模式导出导致一些 DDL 语句,我正在尝试重命名 DDL statemetns 中的索引名称,这可以让我们拥有我们识别的索引/约束名称 在这种情况下,您只需替换 CLOB 数据 GET_DDL 函数返回的对象名称 - 例如使用 replace() 函数。

以上是关于将索引名称导出为 ddl 时重命名它们的主要内容,如果未能解决你的问题,请参考以下文章

在php中上传时重命名文件

在运行时重命名选项卡

平滑运算符:在写入文件时重命名文件

在用户下载文件时重命名另一台服务器上的文件

如何在将通用工件上传到jenkins管道中的JFrog Artifactory时重命名现有文件夹

如何在选择时重命名表中的单个列?