任何时候我插入到我的表中插入运行正常,如预期的那样。
我从表中选择select * from...
,它会挂起,迫使我终止查询,但只有当我的xml_file列被填充时,如果它不是,那么它返回结果并停止执行。
如果填充了xml_file,那么xml_file和extract_file列中都存在<value_error>
,而如果它不是<CLOB>
,那么extract_file列中存在值,并且还存在于xml_file中没有值的列
表:
ID VARCHAR2(6),
VERSION NUMBER(3),
XML_FILE PUBLIC.XMLTYPE,
MODIFIED_DATE DATE,
MODIFIED_BY VARCHAR2(50),
REVISION VARCHAR2(50),
EXTRACT_FILE CLOB
我们可以看到sqlplus中的值,因此它们正确插入,但PL / sql似乎无法查看它。这是几个星期前的工作,但从那时起我们已经从Windows XP迁移到7,升级后pl/sql (version 7.1.1.1339)
进行了升级。不知道为什么这会导致问题,任何想法?
答案 0 :(得分:3)
PL/SQL Developer
或Oracle客户端库中存在一个错误,该错误在检索查询结果时出现,其中XMLType字段存储为&#34;二进制XML&#34;。我至少在最近3年内处理过这个bug。
此错误仅在某些配置中出现。例如。我上次通过从11.2.0.4服务器分发中用相同的库替换客户端中的OCI库来修复这种情况。所以我的建议是安装最新的Oracle客户端版本并进行实验,甚至从x86版本的Oracle Server安装客户端部分。
当然,有一种解决方法是将列的存储类型更改为较慢的CLOB或使用XMLSerialize()函数,但在日常开发中使用此类变通方法很烦人。
P.S。我没有在PL / SQL Developer的最新版本(2015年3月3日发布的11.0)上测试这个问题,所以另一种可能但未经验证的解决方案是将PL / SQL Developer升级到最新版本。
答案 1 :(得分:0)
XMLType需要时间来解析值。这是正常的。您可能存储了大量的XML值。您可以从select中排除此列(使用显式列名而不是*),它将运行得更快。使用where子句限制返回的结果集总是更好。
顺便说一下,PL / SQL引擎没有任何相关内容。
更新: 顺便说一句,它是另一种解决方案,它将XML存储为CLOB,并在需要时立即转换为XML。当您不需要使用xpath从XML内容中进行选择时,它会更好。另请阅读11g for XMLType中的存储选项:http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/xdb01int.htm#BABECDCF