2010-11-18 69 views
2

我想在SQL Developer中调试一个包。我试图调试的方法有两个参数Oracle SQL Developer - 帮助调试

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

,当我在“调试”图标点击,它要求,我需要给这个程序输入。我给

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

,但是当它开始调试,我看到DBLINK的价值

'linkname             
' 

即链接名称,大量的空间,然后结束报价。所以当代码中我试图做到这一点

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

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

+3

是否有一个参数被声明为'CHAR'而不是'VARCHAR2'的原因?我怀疑这是填充的来源。 – 2010-11-18 16:04:27

+0

我不知道为什么它被声明为'CHAR'而不是'VARCHAR'。但它在生产中,所以我不认为我可以改变它的目前调试----我唯一担心的是填充。 – 2010-11-18 16:59:55

回答

2

我猜你的填充来自SQL Developer如何定义其变量绑定(它可能将其定义为CHAR(4000))。现在,你应该能够把装饰()围绕DBLINK变量来解决这个问题在你的测试代码:

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

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

+0

我已经在使用修剪功能,但为此我不得不修改代码。正如我之前告诉过的那样,代码已经投入生产,我不想更改代码。 – 2010-11-18 22:24:05

0

为了进行调试,创建一个接受VARCHAR2参数的包装过程,然后将其传递给您的过程;那么你可以通过调用你的包装来在SQL Developer中进行调试。