【问题标题】:Why is my VARCHAR2 being converted to a LONG in my PL/SQL?为什么在我的 PL/SQL 中我的 VARCHAR2 被转换为 LONG?
【发布时间】:2013-01-28 02:20:05
【问题描述】:

我正在使用 PL/SQL Developer 9.0.6,在 Oracle 11g 数据库上工作。

我在一个包中有一个过程,它创建一些动态 SQL 以使用 execute immediate 运行。变量vSQL 被声明为varchar2(4000)。我的程序正确构建并运行vSQL,并通过out 参数返回ref cursor

然而,在调试我的程序时,发生了一些意想不到的事情:我在vSQL 上设置了一个监视,当vSQL 的长度达到 1000 或更大时,监视窗口中的值从 contentsvSQL 的 /em> 到 literal '(Long Value)' 我无法再查看 vSQL 的内容。

为什么会这样?有什么方法可以转换vSQL,以便在调试程序时仍然可以查看它?

【问题讨论】:

  • Oracle LONG 与显示文本“长值”的客户端之间存在差异。有一些论坛帖子表明这是一个“Oracle 调试器”问题 - 例如。 hereherehere

标签: oracle oracle11g plsqldeveloper


【解决方案1】:

正如其他人指出的那样,PL/SQL Developer 无法在调试器中显示 4000 个字符。这可能是 Oracle 软件包 DBMS_DEBUG 的限制。

作为一种解决方法,您可以使用 Oracle SQL Developer,它使用不同的调试器 DBMS_DEBUG_JDWP。一般来说,PL/SQL Developer 比 Oracle SQL Developer 好一千倍。但如果您需要调试大字符串或集合,那么 Oracle SQL Developer 会更好。

【讨论】:

    【解决方案2】:

    出于调试目的,您可以拥有每个元素长度为 1000 且最多为 4 个元素的 varchar2 数组,这样它将克服调试时超过 1000 个字符限制的问题,并且您仍然可以监控 varchar2(4000) 的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 2014-09-10
      • 2012-10-03
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多