为什么XMLTYPE.getClobVal()不像11g那样在9i上工作?

时间:2010-11-23 12:28:06

标签: oracle plsql xmltype

所以在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:LOB定位器指定了无效的错误。

为什么会有这样的想法?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

请原谅,但是我无法在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;
/

请你试试这个并回复一下这是否适合你?

答案 2 :(得分:0)

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

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