ハマりました。
と、言うよりJava(JDK)とOracleを知らなすぎだっただけかも知れません。
JavaからOracleのストアドを呼び出すのは簡単なのですがストアド側の引数でTYPE RECORD型に対して引数として渡せないんです。
ネットの検索の仕方が悪いのか全く情報が見つからない。
同じようなことで苦労している人は居ないのだろうか?それとも常識すぎるのか?
今回自分がJabaからOracleのストアドを呼出するの初めてでOracleの知識も少ないせいかな?
ストアドはこんな感じです。(あくまでも参考ですので…)
これをJavaのJDKのthinドライバから呼び出すことが出来ないんです。
TYPE_TESTへ値を渡せない。
Object型等色々試しても一向に拉致が空きませんでした。
そのため、いろいろ調べてみるとJPublisherなるものを使用すれば動作させることが出来るとOracleのページに記載があり調べてみたのだがよくわからん。
JDBCのOCIドライバにすれば出来るんじゃないの?なんて記載も見つけたが…
同じ箇所にストアドの中でTYPE RECORD型に値を設定しなおせば大丈夫との記載も。あまり推奨されていないようだが。
ストアド経由で更新処理だけを行うので簡単に済ませたい。
試しに以下のようにしてストアドの呼出関数を1枚かぶせて見たところ上手く行った。
Javaでの呼出はTYPE RECORD型のメンバ数が増えると面倒だがこれで何とか出来る。
Java側はこんな感じです。
第一引数にリターン値が帰ってきます。
もっと良い方法もあると思いますが、JavaからストアドのTYPE RECORD型へ値を渡す際の参考になればと思います。
特にリプレース案件などでストアド使っているシステムをJavaに置き換えるなんて時に同じ現象にぶち当たる人いそうなんだけけどね。