我正在为 Oracle 数据库编写一些迁移脚本,并希望 Oracle 有类似于 MySQL 的 IF EXISTS
构造的东西。
具体来说,每当我想在 MySQL 中删除一个表时,我都会做类似的事情
DROP TABLE IF EXISTS `table_name`;
这样,如果表不存在, DROP
不会产生错误,脚本可以继续。
Oracle 是否有类似的机制?我意识到我可以使用以下查询来检查表是否存在
SELECT * FROM dba_tables where table_name = 'table_name';
但是将其与 DROP
联系在一起的语法正在逃避我。
原文由 Alan Storm 发布,翻译遵循 CC BY-SA 4.0 许可协议
最好和最有效的方法是捕获“table not found”异常:这样可以避免检查表是否存在两次的开销;并且不会遇到这样的问题,即如果 DROP 由于其他原因(可能很重要)失败,异常仍然会向调用者提出:
附录 作为参考,以下是其他对象类型的等效块:
序列
看法
扳机
指数
柱子
数据库链接
物化视图
类型
约束
调度程序作业
用户/架构
包裹
程序
功能
表空间
代名词