简体   繁体   English

使用Oracle SQL Developer报告制作DB对象的DDL

[英]Oracle SQL Developer report to make DDL of DB object

I've wrote a report for SQL Developer to generate the DDL of a DB object. 我为SQL Developer编写了一份报告,以生成数据库对象的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;

The result type of function DBMS_METADATA.GET_DDL is CLOB. 函数DBMS_METADATA.GET_DDL的结果类型为CLOB。

The problem is when i copy the strings output in notepad or word: 问题是当我复制记事本或单词中输出的字符串时:

  • If I choose TABLE for report style every row of the output is quoted with " ". 如果我选择TABLE作为报表样式,则输出的每一行都用“”引用。 for example: " CREATE TABLE "MWPROD"."ORDINI" ... TABLESPACE "MWPROD_TBSDAT" ; " 例如: CREATE TABLE” MWPROD“。” ORDINI“ ... TABLESPACE” MWPROD_TBSDAT“;
  • If I choose SCRIPT for report style some rows are truncate. 如果我选择“ SCRIPT”作为报表样式,则某些行将被截断。

I want found a solution for generate a clean output with complete rows without quotes. 我想找到一种生成带有完整行且不带引号的干净输出的解决方案。

the DDL is quoted by the database - it's to account for idiot developers - sorry, developers who name tables with reserved words, like "TABLE", or for folks that need case sensitive object names DDL由数据库引用-这是为白痴开发人员考虑的-抱歉,使用保留字(例如“ TABLE”)命名表的开发人员,或者需要区分大小写的对象名的人

For the truncated script output, use the SET LONG command in your script. 对于截断的脚本输出,请在脚本中使用SET LONG命令。

SET LONG {80 | SET LONG {80 | n} Sets maximum width (in bytes) for displaying CLOB, LONG, NCLOB and XMLType values; n}设置用于显示CLOB,LONG,NCLOB和XMLType值的最大宽度(以字节为单位); and for copying LONG values. 并用于复制LONG值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM