【问题标题】:why doesn't XMLTYPE.getClobVal() work on 9i like on 11g?为什么 XMLTYPE.getClobVal() 在 9i 上不像在 11g 上那样工作?
【发布时间】:2010-11-23 12:28:06
【问题描述】:

所以在 11g 上我可以毫无问题地执行以下 plsql:

DECLARE
  lob1 CLOB;

BEGIN

  SELECT e.xml_col.getClobVal() INTO lob1 FROM "XML"."XML_TABLE" e WHERE KEY_COL=3 ;
  DBMS_LOB.APPEND(lob1, 'is a test node</test>');

END;

但在 9i 上,相同的代码会导致 ORA-22275: invalid LOB locator specified 错误。

有什么想法吗?

【问题讨论】:

    标签: oracle plsql xmltype


    【解决方案1】:

    异常是否来自 dbms_lob.append 调用?它应该采用两个 LOB,但您将字符串文字作为第二个参数传递。从 9i 到 11g 的隐式类型转换是否有变化?我已经没有任何 9i 数据库可以试用了。

    【讨论】:

      【解决方案2】:

      对不起,但我无法在我的 9.2.0.1.0 上重现它,这个例子完美无缺:

      declare
        fOrigXml XmlType := XmlType(
      '<RootNode>
        <ChildNodes>
        </ChildNodes>
      </RootNode>');
         t clob;
      
      begin
        select fOrigXml.getClobVal() into t from dual;
        dbms_lob.append(t, '4343');
        dbms_output.put_line(t);
      end;
      /
      

      你能试试这个并回复它是否适合你吗?

      【讨论】:

        【解决方案3】:

        我不确定这是否有帮助,但您可以先尝试打开您的 clob 变量:

        DBMS_LOB.createTemporary(lob1, cache => FALSE);
        DBMS_LOB.Open(lob1, DBMS_LOB.lob_readwrite);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-01
          • 2012-05-12
          • 2011-05-13
          • 1970-01-01
          • 2015-04-20
          • 2015-02-07
          相关资源
          最近更新 更多