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