我想根据条件为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'
没有案例发现案例。请帮助。谢谢
答案 0 :(得分:2)
为了始终返回一行,请使用聚合函数。使用NVL
表达式,您还需要COALESCE
或SELECT 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_CODE
和AND rownum = 1
在表中不唯一,则后一个查询可能会导致值大于1.在这种情况下,您可能希望在结尾处添加->
查询。)