我试图确定为什么我的异常输出未正确返回。
这是针对使用PL / SQL进行练习的Oracle SQL Developer。如果需要,我可以提供表格代码。
SET serveroutput on
CREATE OR REPLACE Procedure GetPermissions(user IN VARCHAR, docNum OUT
INTEGER)
IS
BEGIN
SELECT count(*) INTO docNum FROM UserPermissions where UserName=user;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Nothing found for this username');
END;
/
DECLARE
doc_count INTEGER;
BEGIN
doc_count:=0;
GetPermissions('Steve', doc_count);
dbms_output.put_line(' Number of documents: ' || doc_count);
END;
/
我期望在运行“史蒂夫”时异常返回其输出(未找到任何内容),因为这不是我创建的表中的用户名。当前运行时仅显示“文档数:0”。
答案 0 :(得分:5)
COUNT
始终返回结果,在这种情况下,它将返回其中包含0的单行:
COUNT(*)
--------
0
NO_DATA_FOUND
仅在SELECT INTO
查询不返回任何行时发生。
例如,如果您尝试选择给定用户的权限,将抛出NO_DATA_FOUND
:
SELECT permission
INTO p_permission
FROM UserPermissions
WHERE UserName=user;
在这种情况下,查询将返回空结果。
答案 1 :(得分:0)
select into查询返回No_Data_found异常。不是0时。
select into子句的另一个异常是行太多,查询返回的行多于1行,而您试图将所有这些都分配给变量。