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;

你可能感兴趣的:(oracle)