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

oracle:INTO子句中的Case语句不适用于else选项,oracle,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

我想根据条件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:未找到数据
。因此,对于未找到的case,我如何计算ELSE“0”
。请提供帮助。谢谢。

为了始终返回一行,请使用聚合函数。对于
CASE
表达式,您还需要
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;
或者更容易:

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

找到时返回数字1,否则返回0。(如果
PER_ID
MEM_code
在表中不是唯一的,则后一个查询可能会导致值大于1。在这种情况下,您可能希望在查询末尾添加
和rownum=1

以始终返回一行,请使用聚合函数。对于
CASE
表达式,您还需要
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;
或者更容易:

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

找到时返回数字1,否则返回0。(如果
PER_ID
MEM_code
在表中不是唯一的,则后一个查询可能会导致值大于1。在这种情况下,您可能希望在查询结束时添加
和rownum=1

SELECT INTO语句未返回任何行。检查NVL功能。我很困惑。。。您的条件是
,其中PER_ID=个人ID,MEM_code=成员代码。您如何获得一个生成
0
的记录?是否缺少某些内容?SELECT INTO语句未返回任何行。检查NVL功能。我很困惑。。。您的条件是
,其中PER_ID=个人ID,MEM_code=成员代码。您如何获得一个生成
0
的记录?我错过什么了吗?