Otrzymuję błąd w procedurze składowanej Oracle 11g. Błąd znajduje się ...Bufor znaków za mały błąd w procedurze przechowywanej Oracle
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
To się dzieje na linii 31, wiersz, który zawiera out_cnt_tot := 0;
ja naprawdę nie wiem, dlaczego nie ma nic złego w tym wierszu. Inny programista stworzył tę procedurę i naprawdę nie jestem zaznajomiony z procedurami SQL. Czy ktoś może mi pomóc to rozgryźć?
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...
Skąd wiesz, że to linia 31? Jesteś pewny? Czy próbowałeś spojrzeć na plik za pomocą edytora szesnastkowego? Być może zauważysz pewną postać UTF-8, która jest niewidoczna w twoim edytorze, ale powoduje problemy. –
Wygląda raczej na to, że linia będzie później; numery linii w tych wiadomościach czasami nie są takie, jakich byś oczekiwał. Co oznacza, że prawdopodobnie jest to wielkość zmiennej, którą przekazujesz do procedury jako "out_message", która jest zbyt mała, a nie błąd w samej procedurze. Czy możesz pokazać, jak to nazywasz i jak deklarowane są zmienne dla tego połączenia? –
Jedyną rzeczą przekazaną do out_message jest to, że "Test Message" jest dosłowny. Wkrótce dodamy wiadomości, ale jeszcze się do tego nie dostaliśmy, dlatego właśnie wstawiliśmy tam tekst zastępczy. Czy jest możliwe, że ciąg "Test Message" jest zbyt krótki dla tej zmiennej?Nigdy wcześniej nie słyszałem o tym. – grantmcconnaughey