通常,你会做类似的事情
DECLARE
l_count PLS_INTEGER;
BEGIN
SELECT COUNT(*)
INTO l_count
FROM employee
WHERE name = 'chuck'
AND rownum = 1;
IF( l_count = 1 )
THEN
dbms_output.put_line( 'found' );
ELSE
dbms_output.put_line( 'not found' );
END IF;
END;
如果您真的想使用显式游标,则需要检查<<cursor_name>>%rowcount
,而不是sql%rowcount
确定已获取多少行。如果要使用显式游标,还需要注意关闭游标。由于您没有发布表定义或您正在使用的数据,我将使用架构中的EMP
表SCOTT
作为示例
SQL> ed
Wrote file afiedt.buf
1 DECLARE
2 v_emp emp%ROWTYPE;
3 CURSOR c_emp IS
4 SELECT * FROM emp WHERE ename='SMITH';
5 BEGIN
6 OPEN c_emp;
7 FETCH c_emp INTO v_emp;
8 IF c_emp%ROWCOUNT=1 THEN
9 DBMS_OUTPUT.PUT_LINE('found');
10 ELSE
11 DBMS_OUTPUT.PUT_LINE(TO_CHAR('not found'));
12 END IF;
13 CLOSE c_emp;
14* END;
SQL> /
found
PL/SQL procedure successfully completed.
请注意,无论您使用哪种方法,如果您希望DBMS_OUTPUT
显示输出,则需要在您使用的任何工具中启用输出。如果您使用的是 SQL*Plus,则意味着运行
SQL> set serveroutput on;
在执行匿名 PL/SQL 块之前。