【问题标题】:Oracle SQL Developer - Help for debuggingOracle SQL Developer - 调试帮助
【发布时间】:2011-05-12 02:21:10
【问题描述】:

我正在尝试在 SQL Developer 中调试一个包。我尝试调试的方法需要 2 个参数

PROCEDURE procedure_name (dblink IN CHAR, bDebug IN BOOLEAN DEFAULT FALSE) 

当我单击“调试”图标时,它会询问我需要为此过程提供的输入。我给了

dblink:='linkname';
bDebug:=TRUE;

但是当它开始调试时,我看到 dblink 的值为

 'linkname                                                   
 '

即链接名,很多空格,然后是结束引号。所以当我在代码中尝试这样做时

`strSrc VARCHAR(120) := 'tablename'||dblink;`

它给我的错误是缓冲区太小,这是有道理的。但是为什么 SQL Developer 会这样做呢?如何解决?

【问题讨论】:

  • 参数声明为CHAR 而不是VARCHAR2 是否有原因?我怀疑这就是填充的来源。
  • 我不知道为什么它被声明为CHAR 而不是VARCHAR。但它在生产中,所以我不认为我可以为当前调试更改它----我唯一关心的是填充。

标签: oracle debugging plsql oracle-sqldeveloper plsqldeveloper


【解决方案1】:

我猜您的填充来自 SQL Developer 如何定义其要绑定的变量(它可能将其定义为 CHAR(4000))。现在,您应该可以在测试代码中通过将 trim() 放在 dblink 变量周围来解决这个问题:

strSrc VARCHAR(120) := 'tablename'||trim(dblink);

请注意,如果过程传递了一个文字(或正确大小的 CHAR 变量、VARCHAR 等),通常不需要这样做,就像生产代码可能正在做的那样。

【讨论】:

  • 我已经在使用修剪功能,但为此我不得不修改代码。正如我之前所说,代码已经在生产中,我不想更改代码。
【解决方案2】:

出于调试目的,创建一个接受 VARCHAR2 参数的包装过程,然后将其传递给您的过程;然后你通过调用你的包装器在 SQL Developer 中调试它。

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2017-12-10
    • 2010-11-16
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    相关资源
    最近更新 更多