OracleのOUTパラメータって・・・

Oracle10g を使って開発していたのですが、
あるメンバーがPL/SQLの実行結果をOUTパラメータで取得する処理を書きました。

その際「CHAR型」を指定しました。

これが落とし穴です。


完成したので、Javaから呼び出した所、違うところでエラーが…
ま、PL/SQLは通ったし良いかっ!!!と思ったら…


デバッグで実行したところ、String 型のデータが変…
異常に空白が設定されている…なぜ…?


設定場所は…PL/SQLの戻り値だっ!!!!


そうなのです。
PL/SQLの OUT(IN/OUT)パラメータを CHAR型 で設定すると、
3万2千桁?ぐらいのスペースで埋められるのです。

それがそのままJavaに返却され、えらいスペースが設定されるのです。




ちなみに、
PL/SQL内で、OUT (CHAR型)パラメータに 値を設定後、
SQLのINSERT文やUPDATE文 に使用すると、

「ORA-01461: LONG値はLONG列にのみバインドできます。」

と言うエラーが出ます。
TRIM() だろうと、TO_CHAR() だろうと、何をやっても解決できません。

ローカル変数に代入すればOKです。

足からずっ!!!!




教訓:
1.絶対に、PL/SQL の OUT パラメータに CHAR型は使わないっ!
2.OUTパラメータに設定した値を、PL/SQL内で参照しないっ!



環境:
Oracle10g (細かいの知らん)
Windows 2003

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ