如何检查游标是否返回oracle中的任何记录?

ash*_*ram 8 oracle cursor

我有一个以下存储过程,我使用了一个游标.根据游标是否返回任何记录,我需要进行一些处理.

但我不知道如何检查光标是否返回任何记录.

CREATE OR REPLACE PROCEDURE SP_EMPLOYEE_LOOKUP_BY_EMP_ID
(
      IN_USER_ID IN NUMBER, 
      IN_EMPLOYEE_ID NUMBER,
      IN_HC_AS_ON_DATE VARCHAR2,
      emp_cursor OUT SYS_REFCURSOR
) 
IS 

 CURSOR employees IS 
    SELECT  * FROM EMPLOYEE e; 

BEGIN    

if(record exist ) then 

 FOR employee IN employees
  LOOP  

        // do something  

  END LOOP; 
else if employees is empty then 
     // do something else 

END;
Run Code Online (Sandbox Code Playgroud)

A.B*_*ade 13

无法在不打开的情况下检查光标是否返回记录.
(见这里)
所以你可以有一些快速查询只是为了查看是否有记录(例如使用count),

或者,你可以这样做:

CREATE OR REPLACE PROCEDURE SP_EMPLOYEE_LOOKUP_BY_EMP_ID
(
      IN_USER_ID IN NUMBER, 
      IN_EMPLOYEE_ID NUMBER,
      IN_HC_AS_ON_DATE VARCHAR2,
      emp_cursor OUT SYS_REFCURSOR
) 
IS 

 is_found_rec boolean := false;    

 CURSOR employees IS 
    SELECT  * FROM EMPLOYEE e; 

BEGIN    

 FOR employee IN employees
  LOOP  

    is_found_rec := true;

        // do something  

  END LOOP; 

 if not is_found_rec then 
     // do something else 
 end if;

END;
Run Code Online (Sandbox Code Playgroud)


Sim*_*iak 11

我认为只有这样才有可能FETCH.尝试使用

if myCursor%found then
// some body
end if;
Run Code Online (Sandbox Code Playgroud)

但如果有人知道另一种方式,那么纠正我.

  • 是的,没有`FETCH`,它们就毫无用处。游标属性解释:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS541 (2认同)