前台将参数打包成xmltype字段传过来,其中包含图片,当图片较大时会报错
ORA-31167: 无法插入 64K 以上的 XML 节点;
检查时发现某些编码都80k了也不会报这个错误.
现在有两个问题.
1.如何解决ora-31167的问题.
2.莫非lob字段带压缩的?在哪儿能查看是否被压缩了.
1想了两个办法,一是把经过base64编码的图片肢解成若干个小于64k的片段,二是新建一张表,xml节点不存储base64编码后的数据,只存储新建表的一个主键值.
还有其他办法么?

解决方案 »

  1.   

    Is this a limitation of Oracle 10g or is there a workaround?<<
    Yes, it is a limitation of 10g. In 11g, this limitation has been increased to 4GB. So, upgrading to 11g is probably the best "workaround" although I have not tried the method showed in Dr_Billy's link.看来10G中是不能了,但是有解决方案,,参考下
    http://forums.oracle.com/forums/thread.jspa?messageID=958230实验成功了,共享下啊,嘿嘿
      

  2.   

    之前试过直接用plsql developer直接去update xmltype字段,也是可以将节点的容量增加到64k以上,但是再使用extract的时候就会报错ora-31167
      

  3.   

    插入前是没问题的。插入后再extract就不可以了。
    貌似这个容量检查是有时候检查有时候不检查。
    如果你是对一个clob使用xmltype来构造一个xmltype数据就不检查,如果在外部程序直接插入一个xmltype变量就会检查。
    直接修改节点内容时也不检查,但是解析的时候就检查
      

  4.   

    所以如果只是为了插入,那么可以把入参设置为clob,然后用xmltype构造下就可以了。但是没法解析啊
      

  5.   

    http://cn.forums.oracle.com/forums/thread.jspa?messageID=3533558
      

  6.   

    找到两个解决办法.
    1.升级到11g,节点容量不再有限制
    2.使用xdb的存储