Oracle 检查异常块中打开的LOB

Oracle 检查异常块中打开的LOB,oracle,plsql,Oracle,Plsql,实际上,我在异常块中检查打开的游标。 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; E

实际上,我在异常块中检查打开的游标。

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。

我已经找到了答案。如果objBFILE不为null,只需包含。成功了

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

这并不能直接回答您的问题,但您几乎不应该像第一个块那样使用代码。隐式游标比显式游标更容易、更安全、更快。