如何在SQL的CASE WHEN条件不满足时让查询执行失败?
实现CASE WHEN不满足时让查询执行失败的方案
不能用拼写错误这类语法错误的方式——因为语法错误在查询解析阶段就会触发,不管CASE条件是否满足都会直接失败。正确的做法是用数据库内置的运行时错误抛出函数,只有当else分支实际执行时才触发错误,终止整个查询。以下是主流数据库的实现方式:
MySQL/MariaDB:使用
SIGNAL语句抛出自定义错误SELECT CASE WHEN 1 = 1 THEN 'ok' ELSE SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'CASE条件未满足,查询终止'; END;说明:
SQLSTATE '45000'是标准的用户自定义错误码,MESSAGE_TEXT可以自定义错误提示,只有进入else分支时才会抛出错误。PostgreSQL:使用
RAISE语句抛出异常SELECT CASE WHEN 1 = 1 THEN 'ok' ELSE RAISE EXCEPTION 'CASE条件未满足,查询终止'; END;说明:
RAISE EXCEPTION会直接触发运行时异常,仅当else分支执行时才会终止查询。SQL Server:使用
THROW语句抛出错误SELECT CASE WHEN 1 = 1 THEN 'ok' ELSE (THROW 50000, 'CASE条件未满足,查询终止', 1); END;说明:
THROW需要指定自定义错误号(50000及以上为用户可使用范围)、错误消息和状态码,包裹在括号中作为表达式执行,仅在else分支触发时生效。
内容的提问来源于stack exchange,提问作者sasson gabai
相关产品推荐
相关产品推荐

