我要 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/