2

我必须使用 SQL 语句来删除表,如果表不存在,它将崩溃。是否可以使用IF语句删除表 s.executeUpdate("DROP TABLE employee");

4

5 回答 5

11

Oracle 不支持类似 的构造drop table if exists my_table,这在 MySQL(可能还有其他 RDBMS)中显然是合法的语法。

.SQL脚本中,您正在运行DDLDROP和/或CREATE各种对象,Oracle 标准是删除对象,并在对象不存在的情况下忽略错误。如果您愿意,您可以编写代码来检查对象是否存在(请参阅DBA_OBJECTS视图),仅在存在时才删除。

s.executeUpdate,我猜你是用 Java 做的?如果是我,我会直接删除并忽略任何不存在的错误。

希望有帮助。

于 2014-04-05T03:23:57.053 回答
2

假设您拥有正确的权限,您可以执行以下操作

declare var_count int;
select count(*) INTO var_count
from all_tables where OWNER = [schema] and table_name = "EMPLOYEE";
if var_count > 0 then
begin
drop table employee;
end  

如果您在前端代码而不是 pl/sql 过程中执行此操作,请相应地进行调整。

于 2014-04-05T01:52:30.120 回答
0

传统上,在 pl/sql 中,您可以在块中指定异常部分,并在表不存在时捕获异常。

请参见Oracle 错误处理

于 2014-04-05T02:21:37.150 回答
0

这将解决您的问题,当表不存在时不会引发错误。

BEGIN DROP TABLE 员工;其他人为空时的例外情况;结尾;

于 2014-04-06T11:36:51.323 回答
-3

我会使用以下代码:

s.executeUpdate("DROP TABLE IF EXISTS employee")

但根据你的版本,你也可以使用这个:

IF OBJECT_ID('dbo.employee', 'U') IS NOT NULL
DROP TABLE dbo.employee

答案来自:here,这似乎也可能是同一篇文章的副本?我强烈建议您阅读 SQL 文档,并在发布之前尝试做更多的研究,但我觉得您是新手,请务必阅读 StackOverFlow 上的发布规则。

于 2014-04-05T01:59:42.933 回答