当先锋百科网

首页 1 2 3 4 5 6 7

我在Oracle 11g存储过程中收到错误。该错误是...Oracle存储过程中的字符串缓冲区太小错误

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

这是在第31行发生的事情,包含out_cnt_tot := 0;行我真的不知道为什么,有什么错线。另一位程序员创建了这个过程,我对SQL过程并不熟悉。任何人都可以帮我解决这个问题吗?

create or replace

PROCEDURE "FIP_BANKREC_PREP"

(

in_file_date in varchar2,

in_bank_code in varchar2,

out_cnt_apx_miss_no out integer,

out_cnt_prx_miss_no out integer,

out_cnt_apx_no_mtch out integer,

out_cnt_prx_no_mtch out integer,

out_cnt_ap_dup out integer,

out_cnt_pr_dup out integer,

out_cnt_bad out integer,

out_cnt_ap_load out integer,

out_cnt_pr_load out integer,

out_cnt_ap_not_load out integer,

out_cnt_pr_not_load out integer,

out_cnt_tot out integer,

out_message out varchar2

) as

file_date date;

ap_acct_no varchar2(16);

pr_acct_no varchar2(16);

-- ------------------------------------------------------

-- begin logic

-- ------------------------------------------------------

begin

file_date := to_date(in_file_date,'yyyymmdd');

out_cnt_tot := 0; --- THE ERROR IS ON THIS LINE ---

out_message := 'Test Message';

select brec_acct_code into ap_acct_no

from MSSU.zwkfi_bankrec_accts

where brec_acct_bank = in_bank_code

and brec_acct_type = 'AP';

select brec_acct_code into pr_acct_no

from MSSU.zwkfi_bankrec_accts

where brec_acct_bank = in_bank_code

and brec_acct_type = 'PR';

// The rest of the procedure...

+0

你怎么知道它是第31行?你确定?您是否尝试用十六进制编辑器查看文件?也许你可以发现一些在编辑器中不可见的UTF-8字符,但会导致问题。 –

+2

看起来更可能是那之后的路线;这些消息中的行号有时并不完全符合您的预期。这意味着它可能是您传递给过程的变量的大小,因为out_message太小,而不是过程本身的错误。你能说明你是如何调用这个的,以及如何为这个调用声明变量? –

+0

传递给out_message的唯一东西是“测试消息”字面值。我们很快会添加消息,但还没有到达它,所以我们只是在那里放置一些占位符文本。字符串“Test Message”对于该变量是否可能太短?我从未听说过这种情况。 –