oracle - 来自 dbms_metadata.get_ddl 的自定义表 DDL

标签 oracle plsql oracle11g rdbms database-administration

我要 DDL s of Tables 以便我可以使用 UTL 将其放入数据库服务器Oracle 中的包。

问题是:当我们

select dbms_metadata.get_ddl('TABLE','Table_name','Schema_Name') 
  from dual; 

我得到一个包含 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" ;"

我要的是上面的DDL没有 CLOB并且不带参数如 SEGMENT CREATION , PCTFREE ... 等等..

很高兴得到建议。

最佳答案

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

例如,要排除 SEGMENT 内容,您将执行此操作

exec dbms_metadata.set_transform_param
   (dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',false);

在执行您的 get_ddl() 之前称呼。

包文档列出了所有可用的 Transformation 参数。 Find out more .

我认为亚历克斯是对的,前面的“(CLOB)”是您的客户在输出之前的内容。但它是真实的而不是人工制品,摆脱它只是一个简单的字符串操作:
substr(your_string, 7) 

关于oracle - 来自 dbms_metadata.get_ddl 的自定义表 DDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604827/

相关文章:

java - 无法更新 oracle 中的 clob 字段

php - Oracle PHP 插入大量行

oracle - 如何在 Oracle 10g 中获取无效对象的错误列表

function - 如果在数据库中找不到每个输入的特定错误消息

sql - 如何在 oracle 中创建 "singleton"计划作业?

oracle - 如何在 Oracle 中找到哪些查询占用了大部分 CPU 时间?

sql - Oracle 子查询

c# - 使用 C# 执行 Oracle Procedure 时出现错误 ORA-01036

java - 在 ADF 中下载文件仅适用于第一次

sql - 如何根据第一列结果查询表中的不同列