如果 sql 语句中存在表,则从 oracle 数据库中删除表 [重复]

Posted

技术标签:

【中文标题】如果 sql 语句中存在表,则从 oracle 数据库中删除表 [重复]【英文标题】:Drop table from oracle database if table exist in sql statement [duplicate] 【发布时间】:2014-05-17 12:07:18 【问题描述】:

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

【问题讨论】:

您是从 PLSQL 块中执行此操作的吗? 【参考方案1】:

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

开始 DROP TABLE 员工; 例外 其他时候 空值; 结束;

【讨论】:

你真的应该检查语法是否有效......【参考方案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 过程中执行此操作,请相应地进行调整。

【讨论】:

【参考方案3】:

Oracle 不支持像 drop table if exists my_table 这样的构造,这在 mysql(以及可能的其他 RDBMS)中显然是合法的语法。

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

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

希望对您有所帮助。

【讨论】:

【参考方案4】:

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

见Oracle errors handling

【讨论】:

【参考方案5】:

我会使用以下代码:

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

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

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

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

【讨论】:

问题是关于 Oracle,而不是 SQL Server。 "...如果表存在于 sql 语句中" 我只是想题为的问题会反映用户想要学习的内容?

以上是关于如果 sql 语句中存在表,则从 oracle 数据库中删除表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果存在则从表中选择,否则从oracle中的另一个表中选择

WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入

SQL语句把一个表的数据复制到另外一个表里面

ORACLE 中 SQL语句优化

如何用SQL语句求oracle 数据库所有表的行数?

在oracle中创建表,如何写sql语句才能保证表不重复创建,也就是说,如何让他不提示表或视图已存在