san*_*osh 5 oracle dbms-metadata
I am working on java project in which we are getting create table ddl using get_ddl
method in Oracle 12c
.
For example my table name is PARENT_EMP and schema is SECONDARYUSER then I am using get_ddl method.
select dbms.get_ddl('TABLE','PARENT_EMP','SECONDARYUSER') from dual;
Run Code Online (Sandbox Code Playgroud)
before executing above statement I am executing following script to ignore constrainst and table spaces from ddl.
begin
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'STORAGE',false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'REF_CONSTRAINTS', false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'TABLESPACE',false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES', false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'CONSTRAINTS', false);
end;
Run Code Online (Sandbox Code Playgroud)
但是我的问题是,某些表具有REFERENCE PARTITIONED,如果我使用get_ddl方法获得ddl,那么我也将获得外部约束脚本。
父表DDl是:-
create table parent_emp(
empno number primary key,
job varchar2(20),
sal number(7,2),
deptno number(2)
)
partition by list(job)
( partition p_job_dba values ('DBA'),
partition p_job_mgr values ('MGR'),
partition p_job_vp values ('VP')
);
Run Code Online (Sandbox Code Playgroud)
子表DDl是:
CREATE TABLE "SECONDARYUSER"."REFERENCE_EMP"
(
"ENAME" VARCHAR2(10),
"EMP_ID" NUMBER,
"EMPNO" NUMBER,
CONSTRAINT "FK_EMPNO" FOREIGN KEY ("EMPNO")
REFERENCES "SECONDARYUSER"."PARENT_EMP" ("EMPNO") ENABLE
)
PARTITION BY REFERENCE ("FK_EMPNO")
(PARTITION "P_JOB_DBA" ,
PARTITION "P_JOB_MGR" ,
PARTITION "P_JOB_VP" ) "
Run Code Online (Sandbox Code Playgroud)
请提出如何获得子表ddl而不获得外部约束和分区ddl的建议,或者如何使用alter table在已经创建的表上创建部分。还有什么方法可以使用get_ddl
方法获取分区的ddl 吗?
我刚刚找到了答案。
您缺少此声明:
exec dbms_metadata.set_transform_param (dbms_metadata.session_transform,'PARTITIONING',false);
Run Code Online (Sandbox Code Playgroud)
包含它,它将忽略带有“分区”的部分。
所以,你需要这些:
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS',false);
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS',false);
exec dbms_metadata.set_transform_param (dbms_metadata.session_transform,'PARTITIONING',false);
exec dbms_metadata.set_transform_param (dbms_metadata.session_transform,'TABLESPACE',false);
exec dbms_metadata.set_transform_param (dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES', false);
Run Code Online (Sandbox Code Playgroud)
学分:此问题的答案之一。
归档时间: |
|
查看次数: |
92 次 |
最近记录: |