DB2触发器IF条件异常:VAR_ENABLED为FALSE时仍执行后续查询
DB2触发器中AND条件未短路求值的解决办法
你编写的触发器条件代码:
IF(VAR_ENABLED AND ((SELECT 1 FROM .... OR SELECT 1 FROM ...))
存在的问题是:当VAR_ENABLED为FALSE时,右侧的SELECT子查询仍会执行。
这是因为DB2在触发器这类场景的复杂表达式中,不会对逻辑与(AND)进行短路求值——也就是不会因为左侧条件不满足就跳过右侧表达式的执行。
解决这个问题的核心是拆分判断逻辑,让子查询仅在必要时执行:
IF(VAR_ENABLED) THEN IF (EXISTS(SELECT 1 FROM ....) OR EXISTS(SELECT 1 FROM ...)) THEN -- 这里写原条件满足时要执行的逻辑 END IF; END IF;
另外建议把原有的SELECT 1改成EXISTS,因为你只需要判断记录是否存在,EXISTS在性能上更优,它找到匹配记录后就会停止扫描。
内容的提问来源于stack exchange,提问作者survivor
相关产品推荐
相关产品推荐

