我在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”对于该变量是否可能太短?我从未听说过这种情况。 –