如何编写PL/SQL查询,返回成员的所有数据质量错误(每条错误一行)
解决PL/SQL多错误状态返回问题
原查询使用CASE语句的问题在于它是短路逻辑——只要第一个条件满足,就会直接返回对应的错误信息,后续条件不再判断,导致无法展示成员的所有不符合项。要实现每个错误单独返回一行,一个成员最多对应3条错误记录,可以用UNION ALL拆分每个错误条件为独立查询,再合并结果:
SELECT member_code, 'Forename less than 3 characters' AS error_status FROM your_table_name WHERE LENGTH(forename) < 3 UNION ALL SELECT member_code, 'Forename is equal to surname' AS error_status FROM your_table_name WHERE forename = surname UNION ALL SELECT member_code, 'Date of birth after 31/01/2008' AS error_status FROM your_table_name WHERE date_of_birth > TO_DATE('31/01/2008', 'DD/MM/YYYY') UNION ALL -- 可选:添加无错误的记录,若不需要可删除此段 SELECT member_code, 'No error' AS error_status FROM your_table_name WHERE NOT ( LENGTH(forename) < 3 OR forename = surname OR date_of_birth > TO_DATE('31/01/2008', 'DD/MM/YYYY') ) ORDER BY member_code;
说明:
- 每个
SELECT块独立判断一个错误条件,只要符合就会生成一条对应记录,不受其他条件影响 UNION ALL会保留所有符合条件的行(包括同一成员的多条错误记录),比UNION效率更高(无需去重)- 最后一段
UNION ALL用于返回无错误的成员,若不需要展示无错误记录可直接删除 - 最终结果按
member_code排序,方便查看同一成员的所有错误
内容的提问来源于stack exchange,提问作者currentz
相关产品推荐
相关产品推荐

