oracle 游标判空方法

create or replace package TAL_TEST is
 

 TYPE myCursorType IS REF CURSOR;
  
 --测试空游标
 PROCEDURE p_testEmptyCursor;
  
end TAL_TEST;


create or replace package body TAL_TEST is
 
 --测试空游标
 PROCEDURE p_testEmptyCursor
   IS
   rowRecord SJ_CD_PERIODS%ROWTYPE;
   myCursorFirst myCursorType ;
   myCursorSecond myCursorType;
   myCursorThird myCursorType;
   myCursorForth myCursorType;
   BEGIN
     --使用notfound(失败) 数据库中不存在限制条件下的数据集  
     OPEN myCursorFirst FOR
     SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001' ;
     IF myCursorFirst%notfound THEN
       dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');
       ELSE
         dbms_output.put_line('数据库中存在FPERIODID为1001的数据库');
         END IF;
      
     --使用ROWCOUNT(失败)数据库中存在限制条件下的数据集
     OPEN myCursorSecond FOR
     SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';
     IF myCursorSecond%ROWCOUNT = 0 THEN
       dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');
       ELSE
         dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');
         END IF;
          
      --使用FETCH(成功)数据库中存在限制条件下的数据集
      OPEN myCursorThird FOR
      SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';
      FETCH myCursorThird INTO rowRecord; 
       IF myCursorThird%NOTFOUND THEN
         dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');
         ELSE
           dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');
           END IF;
       
      --使用FETCH(成功)数据库中不存在限制条件下的数据集
      OPEN myCursorForth FOR
      SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001';
      FETCH myCursorForth INTO rowRecord; 
       IF myCursorForth%NOTFOUND THEN
         dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');
         ELSE
           dbms_output.put_line('数据库中存在FPERIODID为1001的数据集');
           END IF;          
     END;
      
end TAL_TEST;

myCursorFirst:

--使用notfound(失败) 数据库中不存在限制条件下的数据集  
     OPEN myCursorFirst FOR
     SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001' ;
     IF myCursorFirst%notfound THEN
       dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');
       ELSE
         dbms_output.put_line('数据库中存在FPERIODID为1001的数据库');
         END IF;

myCursorSecond:

--使用ROWCOUNT(失败)数据库中存在限制条件下的数据集
     OPEN myCursorSecond FOR
     SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';
     IF myCursorSecond%ROWCOUNT = 0 THEN
       dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');
       ELSE
         dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');
         END IF;

myCursorThird

--使用FETCH(成功)数据库中存在限制条件下的数据集
      OPEN myCursorThird FOR
      SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';
      FETCH myCursorThird INTO rowRecord; 
       IF myCursorThird%NOTFOUND THEN
         dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');
         ELSE
           dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');
           END IF;

myCursorForth:

--使用FETCH(成功)数据库中不存在限制条件下的数据集
      OPEN myCursorForth FOR
      SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001';
      FETCH myCursorForth INTO rowRecord; 
       IF myCursorForth%NOTFOUND THEN
         dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');
         ELSE
           dbms_output.put_line('数据库中存在FPERIODID为1001的数据集');
           END IF;

猜你喜欢

转载自snwz.iteye.com/blog/2190393