来自dbms_metadata.get_ddl的自定义表DDL

nir*_*ack 2 oracle rdbms plsql database-administration oracle11g

我想要DDL表格,以便我可以使用UTLOracle中的Package 将它放到数据库服务器上.

问题是:当我们

select dbms_metadata.get_ddl('TABLE','Table_name','Schema_Name') 
  from dual; 
Run Code Online (Sandbox Code Playgroud)

我得到一个包含CLOB之前的输出CREATE.喜欢

"(CLOB) 
  CREATE TABLE "SCHEMA"."TABLE_NAME" 
   (TABLE_COLUMNS.....) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "INTF_DATA01" ;"
Run Code Online (Sandbox Code Playgroud)

我要的是上面DDL没有CLOB,没有的参数,例如SEGMENT CREATION,PCTFREE...等等.

很高兴得到建议.

APC*_*APC 7

我们可以使用DBMS_METADATA.SET_TRANSFORM_PARAM方法来控制生成的DDL中包含的子句.

例如,为了排除SEGMENT的东西你将执行它

exec dbms_metadata.set_transform_param
   (dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',false);
Run Code Online (Sandbox Code Playgroud)

在你执行你的get_ddl()电话之前.

包文档列出了所有可用的Trandformation参数.了解更多.


我认为亚历克斯是对的,前面的"(CLOB)"是你的客户在输出之前的东西.但它是真实的,而不是一个人工制品摆脱它将是一个简单的字符串操作:

substr(your_string, 7) 
Run Code Online (Sandbox Code Playgroud)