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
あるメンバーが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