检查EXCEPTION块中的打开LOB

时间:2014-08-31 23:35:37

标签: oracle plsql

通过练习,我在EXCEPTION块中检查打开的游标。

DECLARE
    CURSOR curUSERS IS
    SELECT USERNAME FROM
    USERS;
BEGIN
    OPEN curUSERS;
    --statements truncated
    CLOSE curUSERS;
EXCEPTION WHEN OTHERS THEN
    IF curUSERS%ISOPEN THEN
        CLOSE curUSERS;
    END IF;
END;
/

我在LOB(BLOB,CLOB和BFILE)上尝试过它但是当我抛出NO_DATA_FOUND异常时,它也抛出了一个无效的LOB定位器异常。

DECLARE
    objBFILE BFILE NOT NULL DEFAULT BFILENAME('DIR_USERS', 'user.jpg');
BEGIN
    DBMS_LOB.OPEN(objBFILE);
    DBMS_LOB.CLOSE(objBFILE);
    RAISE NO_DATA_FOUND;
EXCEPTION WHEN OTHERS THEN
    IF DBMS_LOB.ISOPEN(objBFILE)=1 THEN
        DBMS_LOB.CLOSE(objBFILE);
    END IF;
END;
/

有没有一种好方法可以检查游标等已打开的LOB? 如果发生异常,我想关闭打开的LOB。

1 个答案:

答案 0 :(得分:0)

我已经找到了答案here。如果objBFILE不为null,则包括。它奏效了!

IF objBFILE IS NOT NULL
    AND DBMS_LOB.ISOPEN(objBFILE)=1 THEN
    DBMS_LOB.CLOSE(objBFILE);
END IF;