【问题标题】:reason for ORA-22275: invalid LOB locator specifiedORA-22275 的原因:指定的 LOB 定位器无效
【发布时间】:2018-03-02 09:11:54
【问题描述】:

我有以下代码

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 定位器无效

【问题讨论】:

标签: plsql clob


【解决方案1】:

尝试像这样初始化 clob:

dbms_lob.createtemporary(tmp_, true);

而不是这个:

tmp_ CLOB := empty_clob();

【讨论】:

  • @user3235283 欢迎您。不要忘记投票并接受。
【解决方案2】:

你不能声明 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 的建议,声明临时过程参数是有效的

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2019-07-02
    • 2022-01-12
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多