Oracle11g 如果oracle中存在表,如何删除表?
我正试图通过java应用程序使用生成的模式文件创建数据库。在模式中,我还包括了drop查询。但是我想对DROP查询做一些改进。因此,我想在运行drop查询之前检查db对象的存在性,并且仅当db对象存在时才进行drop。 我在谷歌上搜索了一下,发现了一些oracle链接,一些链接建议使用以下语法,还有一些提到了这一点 我还尝试了以下查询:-Oracle11g 如果oracle中存在表,如何删除表?,oracle11g,database-schema,ddl,Oracle11g,Database Schema,Ddl,我正试图通过java应用程序使用生成的模式文件创建数据库。在模式中,我还包括了drop查询。但是我想对DROP查询做一些改进。因此,我想在运行drop查询之前检查db对象的存在性,并且仅当db对象存在时才进行drop。 我在谷歌上搜索了一下,发现了一些oracle链接,一些链接建议使用以下语法,还有一些提到了这一点 我还尝试了以下查询:- IF EXISTS (SELECT * FROM dba_objects WHERE OBJECT_NAME = 'BBB' ) DROP TABLE [B
IF EXISTS (SELECT * FROM dba_objects WHERE OBJECT_NAME = 'BBB' )
DROP TABLE [BBB]
但这是一个错误:-
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
我参考了以下链接:-
如果表格存在,请建议我是否有任何其他查询需要删除带有条件的表格。删除表格时不进行检查。如果存在任何错误,你永远不会知道什么时候出了问题
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE my_table';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
或者您可以在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;
不用支票就把桌子放下。如果存在任何错误,你永远不会知道什么时候出了问题
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE my_table';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
或者您可以在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;
若您运行以下代码,则不必检查表是否存在以及是否存在错误(表已用now wait或您将知道的任何其他命令锁定)
若您运行以下代码,则不必检查表是否存在以及是否存在错误(表已用now wait或您将知道的任何其他命令锁定) 尝试以下操作:如果表“table_name”存在,它将删除该表。 尝试以下操作:如果表“table_name”存在,它将删除该表。
上述块的可能重复将只删除表,我希望删除数据库的所有对象。如果要删除所有对象,则应从DBA_对象中选择。Oracle DB可以存储许多对象类型(表、分区、类型、包、过程、函数、同义词、物化视图、数据库链接、目录和许多其他对象),每个对象类型都有自己的“drop”语句(drop TABLE、drop SYSNSYM、drop DIRECTORY等)。也许这个任务的最佳解决方案是删除用户并重新创建它(这将删除所有用户的对象)。Oracle没有“如果存在”这样的语句,因为MySQL上面提到的块将只删除表,我希望删除数据库的所有对象。如果要删除所有对象,那么应该从DBA_对象中选择。Oracle DB可以存储许多对象类型(表、分区、类型、包、过程、函数、同义词、物化视图、数据库链接、目录和许多其他对象),每个对象类型都有自己的“drop”语句(drop TABLE、drop SYSNSYM、drop DIRECTORY等)。也许这个任务的最佳解决方案是删除用户并重新创建它(这将删除所有用户的对象)
declare
a varchar2(700) ;
begin
execute immediate ' SELECT CASE WHEN tab = 1
THEN ''DROP TABLE TABLE_NAME''
ELSE ''select 1 from dual''
END
FROM ( SELECT sum(case when table_name = ''TABLE_NAME'' then 1 else 0 end ) as tab FROM user_tables)' into a;
EXECUTE IMMEDIATE a;
end;