Oracle SQL 开发人员报告生成 DB 对象的 DDL
Oracle SQL Developer report to make DDL of DB object
我已经为 SQL 开发人员编写了一份报告,以生成数据库对象的 DDL。
SELECT DBMS_METADATA.GET_DDL(UPPER(:OBJECT_TYPE),UPPER(:OBJECT_NAME),UPPER(:OBJECT_SCHEMA)) DDL FROM DUAL
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('CONSTRAINT'),UPPER(CONSTRAINT_NAME),UPPER(:OBJECT_SCHEMA)) AS "DDL OGGETTI DIPENDENTI" from DBA_CONSTRAINTS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) and CONSTRAINT_TYPE not like 'R'
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('REF_CONSTRAINT'),UPPER(CONSTRAINT_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_CONSTRAINTS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) and CONSTRAINT_TYPE like 'R'
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('INDEX'),UPPER(INDEX_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_INDEXES where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME)
UNION ALL
select DBMS_METADATA.GET_DEPENDENT_DDL (UPPER('COMMENT'),UPPER(TABLE_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_COL_COMMENTS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) AND COMMENTS is not null GROUP BY TABLE_NAME
UNION ALL
select DBMS_METADATA.GET_DEPENDENT_DDL (UPPER('OBJECT_GRANT'),UPPER(TABLE_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_TAB_PRIVS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) GROUP BY TABLE_NAME
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('SYNONYM'),UPPER(TABLE_NAME),UPPER('PUBLIC')) from DBA_SYNONYMS where TABLE_OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) GROUP BY TABLE_NAME
UNION ALL
select DBMS_METADATA.GET_DEPENDENT_DDL (UPPER('TRIGGER'),UPPER(TABLE_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_TRIGGERS where TABLE_OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) GROUP BY TABLE_NAME;
函数DBMS_METADATA.GET_DDL的结果类型是CLOB。
问题是当我复制在记事本或word中输出的字符串时:
- 如果我选择 TABLE 作为报告样式,输出的每一行都用“”引号。例如:" 创建 TABLE "MWPROD"."ORDINI" ... TABLESPACE "MWPROD_TBSDAT" ;"
- 如果我选择 SCRIPT 作为报告样式,一些行会被截断。
我想找到一个解决方案来生成干净的输出,其中包含不带引号的完整行。
DDL 由数据库引用 - 这是为了解决白痴开发人员的问题 - 抱歉,使用保留字命名表的开发人员,例如 "TABLE",或者需要区分大小写的对象名称的开发人员
对于截断的脚本输出,请在脚本中使用 SET LONG 命令。
设置长{80 | n}
设置显示 CLOB、LONG、NCLOB 和 XMLType 值的最大宽度(以字节为单位);并用于复制 LONG 值。
我已经为 SQL 开发人员编写了一份报告,以生成数据库对象的 DDL。
SELECT DBMS_METADATA.GET_DDL(UPPER(:OBJECT_TYPE),UPPER(:OBJECT_NAME),UPPER(:OBJECT_SCHEMA)) DDL FROM DUAL
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('CONSTRAINT'),UPPER(CONSTRAINT_NAME),UPPER(:OBJECT_SCHEMA)) AS "DDL OGGETTI DIPENDENTI" from DBA_CONSTRAINTS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) and CONSTRAINT_TYPE not like 'R'
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('REF_CONSTRAINT'),UPPER(CONSTRAINT_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_CONSTRAINTS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) and CONSTRAINT_TYPE like 'R'
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('INDEX'),UPPER(INDEX_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_INDEXES where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME)
UNION ALL
select DBMS_METADATA.GET_DEPENDENT_DDL (UPPER('COMMENT'),UPPER(TABLE_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_COL_COMMENTS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) AND COMMENTS is not null GROUP BY TABLE_NAME
UNION ALL
select DBMS_METADATA.GET_DEPENDENT_DDL (UPPER('OBJECT_GRANT'),UPPER(TABLE_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_TAB_PRIVS where OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) GROUP BY TABLE_NAME
UNION ALL
select DBMS_METADATA.GET_DDL (UPPER('SYNONYM'),UPPER(TABLE_NAME),UPPER('PUBLIC')) from DBA_SYNONYMS where TABLE_OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) GROUP BY TABLE_NAME
UNION ALL
select DBMS_METADATA.GET_DEPENDENT_DDL (UPPER('TRIGGER'),UPPER(TABLE_NAME),UPPER(:OBJECT_SCHEMA)) from DBA_TRIGGERS where TABLE_OWNER like UPPER(:OBJECT_SCHEMA) and TABLE_NAME like UPPER(:OBJECT_NAME) GROUP BY TABLE_NAME;
函数DBMS_METADATA.GET_DDL的结果类型是CLOB。
问题是当我复制在记事本或word中输出的字符串时:
- 如果我选择 TABLE 作为报告样式,输出的每一行都用“”引号。例如:" 创建 TABLE "MWPROD"."ORDINI" ... TABLESPACE "MWPROD_TBSDAT" ;"
- 如果我选择 SCRIPT 作为报告样式,一些行会被截断。
我想找到一个解决方案来生成干净的输出,其中包含不带引号的完整行。
DDL 由数据库引用 - 这是为了解决白痴开发人员的问题 - 抱歉,使用保留字命名表的开发人员,例如 "TABLE",或者需要区分大小写的对象名称的开发人员
对于截断的脚本输出,请在脚本中使用 SET LONG 命令。
设置长{80 | n} 设置显示 CLOB、LONG、NCLOB 和 XMLType 值的最大宽度(以字节为单位);并用于复制 LONG 值。