Oracle、MSSQL、PostgreSQL是否支持带条件判断的UPDATE/INSERT SQL执行
条件触发DML语句的数据库支持情况
你给出的这种用CASE WHEN直接包裹UPDATE/INSERT的写法,在Oracle、MSSQL、PostgreSQL中都不支持。因为CASE是条件表达式,仅用于返回特定值,无法控制流程执行数据操作语句(DML)。
要实现“仅当特定条件满足时执行DML”的需求,不同数据库有各自的写法:
Oracle
需要借助PL/SQL块的IF条件判断来实现:
BEGIN -- 用NOT EXISTS比COUNT(1)=0更高效,无需全表扫描 IF NOT EXISTS (SELECT 1 FROM DataTable2) THEN UPDATE DataTable SET column1 = 1, column2 = NULL; END IF; END; /
MSSQL
直接使用T-SQL的IF条件语句即可:
IF NOT EXISTS (SELECT 1 FROM DataTable2) BEGIN UPDATE DataTable SET column1 = 1, column2 = NULL; END
PostgreSQL
可以通过DO块结合PL/pgSQL的条件判断实现:
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM DataTable2) THEN UPDATE DataTable SET column1 = 1, column2 = NULL; END IF; END $$;
如果是INSERT语句,逻辑完全一致,只需把UPDATE替换成对应的INSERT语句即可。
内容的提问来源于stack exchange,提问作者zheng
相关产品推荐
相关产品推荐

