Oracle是否存在类似SQL Server的IF EXISTS机制实现表存在时删列?
Oracle实现“仅当列存在时删除列”的方法
Oracle没有像SQL Server那样支持直接在ALTER TABLE前加IF EXISTS的原生语法,要实现你需要的需求,得用PL/SQL结合动态SQL来完成,具体写法如下:
BEGIN FOR col IN (SELECT column_name FROM user_tab_columns WHERE table_name = 'TEST_TABLE' AND column_name = 'LEGACY_VALUE') LOOP EXECUTE IMMEDIATE 'ALTER TABLE TEST_TABLE DROP COLUMN LEGACY_VALUE'; END LOOP; END; /
补充说明:
- 这里通过查询
user_tab_columns视图(仅包含当前用户的表列信息)判断目标列是否存在;如果需要操作其他用户的表,换成all_tab_columns并加上owner = '目标用户名'的条件即可。 - 利用FOR循环的特性:只有查询到匹配的列时,循环体才会执行,自然避免了列不存在时执行
ALTER TABLE抛出错误的问题。 - 因为Oracle不允许在PL/SQL块中直接执行静态DDL语句,所以用
EXECUTE IMMEDIATE来执行动态生成的删除列语句。
内容的提问来源于stack exchange,提问作者ksclfanatic
相关产品推荐
相关产品推荐

