oracle:Case语句中的INTO条款不适用于else选项

时间:2016-11-15 05:36:10

标签: oracle

我想根据条件为true或false设置ret'0'或'1'。我已经编写了以下Oracle SQL查询:

DECLARE
member_code VARCHAR2(3);
person_id VARCHAR2(3);
ret VARCHAR2(1);
BEGIN
person_id := 'id1';
member_code := '123';
SELECT CASE  WHEN PER_ID = person_id AND MEM_CODE = member_code THEN '1' ELSE '0' END 
into ret
FROM Table_Persons
WHERE PER_ID = person_id AND MEM_CODE = member_code;
DBMS_OUTPUT.PUT_LINE(ret);
END;

如果代码匹配并且返回“1”,则代码可以正常工作。 但是,对于没有大小写匹配的代码,代码不会返回“0”。相反,它显示错误ORA-01403: no data found。所以,我如何评估ELSE '0'没有案例发现案例。请帮助。谢谢

1 个答案:

答案 0 :(得分:2)

为了始终返回一行,请使用聚合函数。使用NVL表达式,您还需要COALESCESELECT NVL(MAX(CASE WHEN PER_ID = person_id AND MEM_CODE = member_code THEN '1' END), '0') into ret FROM Table_Persons WHERE PER_ID = person_id AND MEM_CODE = member_code; 来处理NULL值。

SELECT COUNT(*) 
into ret
FROM Table_Persons
WHERE PER_ID = person_id AND MEM_CODE = member_code;

或者更容易:

PER_ID

在找到时返回数字1,否则返回0。 (如果MEM_CODEAND rownum = 1在表中不唯一,则后一个查询可能会导致值大于1.在这种情况下,您可能希望在结尾处添加->查询。)