ORA-22275的原因:指定了无效的LOB定位符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-22275的原因:指定了无效的LOB定位符相关的知识,希望对你有一定的参考价值。

我有以下代码

DECLARE

      tmp_ CLOB := empty_clob();

   BEGIN

      Dbms_Output.Put_Line('Test 4: Set CLOB "A" and then overwrite with empty_clob():');

      Dbms_Output.Put_Line('   Expected: <PARENT><VALUE></VALUE></PARENT>');

      in_ := Plsqlap_Record_API.New_Record('PARENT');

      Plsqlap_Record_API.Set_Value(in_, 'VALUE', TO_CLOB('A'));

      Plsqlap_Record_API.Set_Value(in_, 'VALUE', tmp_);

      Plsqlap_Record_API.To_Xml(xml_, in_);

      Plsqlap_Record_API.Clear_Record(in_);

      Dbms_Output.Put_Line('   Result:   ' || xml_);

   EXCEPTION 

      WHEN OTHERS THEN

          Dbms_Output.Put_Line('   Result:   ' || SQLERRM);

   END;

结果

测试4:设置CLOB“A”,然后用empty_clob()覆盖: 预期:结果:ORA-22275:指定了无效的LOB定位符

答案

尝试初始化clob,如下所示:

dbms_lob.createtemporary(tmp_, true);

而不是这个:

tmp_ CLOB := empty_clob();

另一答案

你不能声明tmp_CLOB:= empty_clob();

因为它是DBMS_LOB的实现限制。

根据oracle文档:为了成功完成DBMS_LOB子程序,您必须提供一个输入定位器,它表示数据库表空间或外部文件系统中已存在的LOB

你可以参考http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_lob.htm#ARPLS66616

正如Plirkee所建议的,声明临时过程参数是有效的

以上是关于ORA-22275的原因:指定了无效的LOB定位符的主要内容,如果未能解决你的问题,请参考以下文章

触发器中新行上的 Lob 定位器

oracle如何操作clob数据类型

指定给 RtlFreeHeap 的地址无效的原因是啥

shell 正则整理

fixed无效的情况

创建表规范 lob 字段