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( …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我生成的架构文件通过我的 Java 应用程序创建数据库。在模式中,我也包含了 drop 查询。但我想对 DROP QUERY 做一些改进。所以我想在运行 drop 查询之前检查 db 对象的存在,并且只有当它存在时才删除。我用谷歌搜索并找到了一些 oracle 链接,一些链接建议遵循以下语法,有些提到ORACLE 不支持这种语法。
SYNTAX A:
IF EXISTS DROP TABLE TABLE_NAME
SYNTAX B:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下查询:-
IF EXISTS (SELECT * FROM dba_objects WHERE OBJECT_NAME = 'BBB' )
DROP TABLE [BBB]
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:-
Error starting at line 2 in command:
DROP TABLE [BBB]
Go
Error report:
SQL Error: ORA-00903: invalid table name
00903. 00000 - "invalid table name"
*Cause: …
Run Code Online (Sandbox Code Playgroud)