我试图确定为什么我的异常输出没有正确返回.
这适用于Oracle SQL Developer,使用PL/SQL进行练习.如果需要,我可以提供表格代码.
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;
/
Run Code Online (Sandbox Code Playgroud)
我期待异常在'Steve'运行时返回其输出(没有找到),因为它不是我创建的表中的用户名.当前运行时只显示"文档数:0".
COUNT 总是返回一个结果,在这种情况下,它返回一个0的单行:
COUNT(*)
--------
0
Run Code Online (Sandbox Code Playgroud)
NO_DATA_FOUND仅在SELECT INTO查询未返回任何行时发生.
例如,NO_DATA_FOUND如果您尝试为给定用户选择权限,则会抛出:
SELECT permission
INTO p_permission
FROM UserPermissions
WHERE UserName=user;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,查询将返回空结果.