sql - Character string buffer too small error in Oracle Stored Procedure -


i getting error in oracle 11g stored procedure. error is...

ora-06502: pl/sql: numeric or value error: character string buffer small

it happening @ line 31, line contains out_cnt_tot := 0; i'm not sure why there wrong line. programmer created procedure , i'm not familiar sql procedures. can me figure out?

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     )  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;   --- error on line ---   out_message := 'test message';    select brec_acct_code ap_acct_no      mssu.zwkfi_bankrec_accts     brec_acct_bank = in_bank_code       , brec_acct_type = 'ap';    select brec_acct_code pr_acct_no      mssu.zwkfi_bankrec_accts     brec_acct_bank = in_bank_code       , brec_acct_type = 'pr';        // rest of procedure... 

simple demo of scenario mentioned in comments:

create or replace procedure p42(out_message out varchar2) begin   out_message := 'test message'; end p42; / 

if call variable declared big enough, it's fine. have 12-char variable, assigning 12-char value not problem:

declare   msg varchar2(12); begin   p42(msg); end; /  anonymous block completed 

but if make mistake , make caller's variable small error you're seeing:

declare   msg varchar2(10); begin   p42(msg); end; /  error report: ora-06502: pl/sql: numeric or value error: character string buffer small ora-06512: @ "stackoverflow.p42", line 3 ora-06512: @ line 4 06502. 00000 -  "pl/sql: numeric or value error%s" *cause:     *action: 

the error stack shows both line in procedure errored (line 3), , line in caller triggered (line 4). depending on you're calling might not have whole stack, of course.

you mentioned there various error messagesin future. need make sure ever calls defines variables big enough cope of messages. if stored in table semi-automate that, otherwise it'll manual code review check.


ok, saw c# comment after posting this. looks you're calling this constructor; doesn't default size gets, not unreasonable think might 1. need call this constructor instead specify size explicitly:

oracleparameter(string, oracletype, int32)
initializes new instance of oracleparameter class uses parameter name, data type, , length.

... like:

oracleparameter prm15 = new oracleparameter("out_str_message",     oracledbtype.varchar2, 80); 

unless there's way reset size after creation, can't see. (not i've ever used!).


Comments