san*_*osh 1 ddl oracle11g database-schema
我正在尝试使用我生成的架构文件通过我的 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:
*Action:
Error starting at line 1 in command:
IF EXISTS (SELECT * FROM dba_objects WHERE OBJECT_NAME = 'BBB' ) DROP TABLE [BBB]
Error report:
Unknown Command
Run Code Online (Sandbox Code Playgroud)
我参考了以下链接:- https://community.oracle.com/thread/2421779?tstart=0
如果表存在,请建议我是否有任何其他查询可以删除带有条件的表。
小智 5
不检查就删除表。如果存在任何错误,您将永远不会知道什么时候出了问题。
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE my_table';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Run Code Online (Sandbox Code Playgroud)
或者您可以在 Oracle 字典中搜索。
DECLARE
l_cnt NUMBER;
BEGIN
SELECT count(*)
INTO l_cnt
FROM user_tables
WHERE table_name = 'MY_TABLE';
IF l_cnt = 1 THEN
EXECUTE IMMEDIATE 'DROP TABLE my_table';
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16429 次 |
最近记录: |