Oracle 11gストアドプロシージャでエラーが発生します。エラーは、それがライン31は、その行に何か問題があり、なぜ私は本当にわからないout_cnt_tot := 0;
を含む行で起こっている...Oracleストアドプロシージャで文字列バッファが小さすぎます
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
です。別のプログラマーがこのプロシージャーを作成しました。私は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...
あなたはそれが31行目のことをどのように知っていますか?本気ですか? 16進エディタでファイルを見ようとしましたか?あなたのエディタでは見えないが、問題を引き起こすUTF-8文字を見つけることができるかもしれません。 –
それは、その後の行になる可能性はかなり高くなります。これらのメッセージの行番号は、時にはあなたが期待するものではありません。これはおそらくプロシージャ自体のエラーではなく、小さすぎる 'out_message'としてプロシージャに渡す変数のサイズを意味します。あなたはこれをどのように呼んでいるのか、その呼び出しの変数がどのように宣言されているのかを示すことができますか? –
out_messageに渡されるのは、 "Test Message"というリテラルだけです。私たちはすぐにメッセージを追加しようとしていますが、まだそれを知りませんでしたので、そこにいくつかのプレースホルダテキストを置いています。文字列 "Test Message"がその変数に対して短すぎる可能性はありますか?私はこれまでに起こったことは聞いたことがありません。 – grantmcconnaughey