【问题标题】:Selecting from table is causing pl/sql to hang从表中选择导致 pl/sql 挂起
【发布时间】:2015-06-14 17:02:13
【问题描述】:

每当我插入我的表时,插入运行正常,正如预期的那样。

我从表中选择select * from...,它挂起,迫使我终止查询,但只有当我的 xml_file 列被填充时,如果没有,它会返回结果并停止执行。

如果填充了 xml_file,则 <value_error> 存在于 xml_file 和 extract_file 列中,而如果不是,则 <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)。不知道为什么这会导致问题,有什么想法吗?

【问题讨论】:

  • 当您说“pl/sql”时,您是指正在运行 pl/sql 语句(例如begin ... end;)还是指 PL/SQL Developer,IDE?
  • 在执行select之前是否需要commitinsert中的数据?
  • @MTO 读者不阻止作者,作者也不阻止读者。
  • @Boneist 在 IDE 的标准 sql 窗口中。我已经完成了 Rusty 在下面所说的作为一种解决方法,但想知道我是否遗漏了什么或做错了什么,即类型等。现在它正在工作,我不需要查询该列,我将其保留为它是。很高兴尝试任何其他人的建议
  • @Aaron - 还有一种称为 PL/SQL 的编程语言。也许你听说过? ;)

标签: oracle plsql windows-7 oracle11g plsqldeveloper


【解决方案1】:

PL/SQL Developer 或 Oracle 客户端库中存在一个错误,该错误在检索带有存储为“二进制 XML”的 XMLType 字段的查询结果时出现。我处理这个错误至少持续了 3 年。

此错误仅出现在某些配置中。例如。上次我通过用 11.2.0.4 服务器发行版中的相同库替换客户端中的 OCI 库来解决这种情况。所以我的建议是安装最新的 Oracle 客户端版本并进行试验,或者甚至从 x86 版本的 Oracle Server 安装客户端部分。

当然,有一些变通方法可以将列的存储类型更改为较慢的 CLOB 或使用 XMLSerialize() 函数,但是在日常开发中使用这种变通方法很烦人。

附:我没有在最新版本的 PL/SQL Developer(2015 年 3 月 3 日发布的 11.0)上测试这个问题,所以另一种可能但未经证实的解决方案是将 PL/SQL Developer 升级到最新版本。

【讨论】:

  • +1 这是正确的答案,在过去的几年里,我也遇到过各种不同版本的 PL/SQL 开发人员的这个问题
  • 11.0.4.1774 版本的错误仍然存​​在 :-(
【解决方案2】:

XMLType 需要时间来解析值。这是正常的。您可能在那里存储了很大的 XML 值。您可以从选择中排除此列(使用显式列名而不是 *),它会运行得更快。并且最好使用 where 子句限制返回的结果集。

顺便说一句,与 PL/SQL 引擎无关。

更新: 顺便说一句,另一种解决方案是将 XML 存储为 CLOB 并在需要时即时转换为 XML。当您不需要使用 xpath 从 XML 内容本身中进行选择时,它会更好。阅读更多关于 11g 中用于 XMLType 的存储选项:http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/xdb01int.htm#BABECDCF

【讨论】:

  • 是的,这是我目前的工作。我会标记为答案,但我没有足够的声誉:(
  • 我使用 extractvalue 函数来构建使用此列的插入语句,所以它是 100% 需要的,而不是任何用户而是另一个进程。但我一定会读一读文献。谢谢@Rusty
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多