Sql 使用计数(*)时,如何获取未发现异常的数据输出?
我试图确定为什么异常输出没有正确返回 这是为Oracle SQL开发人员准备的,他们正在练习PL/SQL。如果需要,我可以提供表格代码Sql 使用计数(*)时,如何获取未发现异常的数据输出?,sql,oracle,exception,plsql,Sql,Oracle,Exception,Plsql,我试图确定为什么异常输出没有正确返回 这是为Oracle SQL开发人员准备的,他们正在练习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;
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;
/
我希望在运行“Steve”时,异常会返回其输出(未找到任何内容),因为在我创建的表中,Steve不是用户名。当前运行时,is仅显示“文档数:0”。
COUNT
始终返回一个结果,在这种情况下,它返回一行,其中0:
COUNT(*)
--------
0
只有当选择进入
查询未返回任何行时,才会出现未找到数据
例如,如果您尝试为给定用户选择权限,将抛出找不到任何数据
:
SELECT permission
INTO p_permission
FROM UserPermissions
WHERE UserName=user;
在这种情况下,查询将返回一个空结果。COUNT
始终返回一个结果,在这种情况下,它返回一个包含0的单行:
COUNT(*)
--------
0
只有当选择进入
查询未返回任何行时,才会出现未找到数据
例如,如果您尝试为给定用户选择权限,将抛出找不到任何数据
:
SELECT permission
INTO p_permission
FROM UserPermissions
WHERE UserName=user;
在这种情况下,查询将返回一个空结果。当查询的输出为无行时,选择“进入查询返回且未找到数据”异常。不是在0的时候
select into子句的另一个异常是行太多,其中查询返回的行数超过1行,而您正试图将所有这些行分配给一个变量。select into查询返回时未找到任何数据。当查询输出为无行时,出现异常。不是在0的时候
select into子句的另一个例外是行太多,查询返回的行数超过1行,而您正试图将所有这些行分配给一个变量。。。。或者如果Steve有多个权限,它将返回太多行:)@Littlefoot,或者如果Steve只有一个权限,它将正常完成:)我只知道他在某个时间点有0个权限,但对于Steve,你永远无法确定。嗯,对。。。我忘记了查询实际上可能会返回一些内容:)。。。或者如果Steve有多个权限,它将返回太多行:)@Littlefoot,或者如果Steve只有一个权限,它将正常完成:)我只知道他在某个时间点有0个权限,但对于Steve,你永远无法确定。嗯,对。。。我忘记了查询实际上可能会返回一些内容:)