我很长时间没有完成PLSQL,并尝试运行脚本来协助查询XML blob。
该脚本来自一个旧线程,(https://community.oracle.com/thread/514518)当时显然工作但似乎在11.2上运行时遇到了问题。
我的dbs: Oracle Database 11g 11.2.0.4.0版 - 64位生产 PL / SQL版本11.2.0.4.0 - 生产 “核心11.2.0.4.0生产” 适用于Linux的TNS:版本11.2.0.4.0 - 生产 NLSRTL版本11.2.0.4.0 - 生产
CREATE OR REPLACE FUNCTION XBLOB_To_CLOB(L_BLOB BLOB) RETURN CLOB IS
L_CLOB CLOB;
L_SRC_OFFSET NUMBER;
L_DEST_OFFSET NUMBER;
L_BLOB_CSID NUMBER := DBMS_LOB.DEFAULT_CSID;
V_LANG_CONTEXT NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
L_WARNING NUMBER;
L_AMOUNT NUMBER;
BEGIN
IF DBMS_LOB.GETLENGTH(L_BLOB) > 0 THEN
DBMS_LOB.CREATETEMPORARY(L_CLOB, TRUE);
L_SRC_OFFSET := 1;
L_DEST_OFFSET := 1;
L_AMOUNT := DBMS_LOB.GETLENGTH(L_BLOB);
DBMS_LOB.CONVERTTOCLOB(L_CLOB,
L_BLOB,
L_AMOUNT,
L_SRC_OFFSET,
L_DEST_OFFSET,
1,
V_LANG_CONTEXT,
L_WARNING);
RETURN L_CLOB;
ELSE
L_CLOB:= TO_CLOB('');
RETURN L_CLOB;
End IF;
DBMS_LOB.FREETEMPORARY(L_CLOB);
END;
ORA-06502:PL / SQL:数字或值错误:指定了无效的LOB定位符: ORA-22275 ORA-06512:在“SYS.DBMS_LOB”中,第978行 ORA-06512:在“TEST.XBLOB_To_CLOB”第14行
目前,脚本不是由另一个脚本或远程函数执行的,我只是试图在SQL Developer中运行它。 我知道有很多关于ORA-22275的问题,但我发现没有什么看起来像我的问题。 显然运行良好的线程上的其他脚本返回相同的ORA-22275错误。
代码或dbs的任何建议都有错误吗?
答案 0 :(得分:0)
在检查blob的长度之前添加以下内容怎么样?
DBMS_LOB.CREATETEMPORARY(L_BLOB, TRUE);
答案 1 :(得分:0)
如果您使用空L_BLOB
调用proc,那么您的条件会转到ELSE
,您使用L_CLOB
,但没有为其定义定位器,因此您应该放置{{ 1}} CREATETEMPORARY
阻止。
答案 2 :(得分:0)
当输入参数 L_BLOB 为空时,会出现此错误。对于空值函数,GetLength返回null,然后启动ELSE条件。
最后,您尝试为具有默认空值的变量调用 DBMS_LOB.FREETEMPORARY(L_CLOB); 。对于null-value函数,FreeTemporary返回指定的无效LOB定位符:ORA-22275。 您应该在ELSE块中初始化L_CLOB或在调用函数FreeTemporary之前检查L_CLOB。