きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

ストアドプロシージャを書いてみた

昨日は勉強をして、今日は実践。

いちおうJavaからキックされるという前提。
JavaからはINとして文字列の配列をもらう。
JavaにはCSVをreadLineさせて、適当な数の行を無加工な状態で渡せという仕様にした。
正直言って、ファイル名を渡すという仕様もありだと思うんだが、
コミットの単位をJava側に持たせたいなぁ〜、なんて。
splitはDBMS_UTILITYパッケージのCOMMA_TO_TABLEプロシージャを利用したものの、
あまりうまく動いてくれなかったので、入力データの各項目を""で囲むようにした。
そうすると、今度はsplit後のデータに""が付いたままなので削るという作業も…。
カーソルのOPEN,PARSE,EXECUTE,FETCHをこなして、単純なselectを実装。
そこから値を計算。
その後にINSERT。

OPENやPARSEは何度もやる必要はないだろうか、冒頭でやってしまった。
じゃないとPL/SQLにした意味がないんじゃなかろうか。

あと、とりあえず全部のSQLの引数は埋め込みではなく変数にした。
SQLの文字が全部合ってないと意味がないだろうけどさ。
再利用の可能性は残しておくもんだ。

COMMA_TO_TABLEプロシージャの問題は、('あいう,10')などのように、数字が現れると起こるようだ。
とりあえず、これは使いにくくて仕方がないということが分かった。
ただ、まだsqlplusで値を渡しているだけなので、明日にでもJavaから動かしてみよう。

PL/SQLってCOBOLっぽいね。懐かしく感じたよ。