2

我正在尝试在 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 会这样做呢?如何解决?

4

2 回答 2

2

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

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

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

于 2010-11-18T22:06:29.967 回答
0

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

于 2010-11-19T00:52:17.673 回答