投稿

6月, 2011の投稿を表示しています

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