DBFluteにおけるプロシージャコールにおいて、 Oracleのストアドプロシージャのパラメータに利用できる型として、 TABLE型、OBJECT型に(機能制限ありながらも)対応しました。 (DBFlute-0.9.7.6より) Oracleの配列・構造体パラメータ | DBFlute 実現には苦労しましたが、DBFluteらしい仕様にできたと思います。 何に苦労したかというと、情報を仕入れるのに苦労しました。 ずばり、OracleのJDBCドライバの扱い方ですね。 こちらのブログ記事を参考にさせて頂きました。 // 引数のSTRUCTやARRAYに対応する方法 | 谷本 心 in せろ部屋 http://d.hatena.ne.jp/cero-t/20070325/1174831402 ありがとうございます。(本当に助かりました) これがなかったら多分まだ対応できていなかったでしょう。 また、無限階層処理、つまり、再帰処理が大変でした。 実行時の再帰処理は、まあ普通に大変、でもよくやることではあるし。 自動生成における型の解決の再帰構造の構築処理が猛烈に大変でした。 Sql2Entityの既存処理に当てはめなければならないというのもあり。 でも、まあ DBFlute がプロシージャコールに対して、 (ある程度の)積極的サポートをするのであれば、 // プロシージャコールのドキュメントを書きました http://d.hatena.ne.jp/jflute/20101117 一気に大量のデータをやり取りする「配列・構造体パラメータ」の サポートはやはり必要なのかなと。というか、jflute 自身あんまり OBJECT型とかよく知らなかったという感じでした。 これは、DBFluteユーザの集いページで話題になったものです。 (フィードバックをくれた taku さん、ありがとう) プロシージャ引数の型について (Oracle) | DBFluteユーザの集い
機能制限が幾つか(幾つも!?)あります。 リソースパワー的な問題もあれば、 「やり方がわからないから」というのもあります。 例えば、CLOB。 oracle.sql.STRUCTの属性として、 CLOBデータをどのように表現(構築)すればよいのか。 (単なる文字列ではOracleの内部変換エラー) そして、同様の感じでTABLE型の中のTABLE型。 oracle.sql.ARRAY に oracle.sql.ARRAYだと Oracleの内部変換エラー。 また、「DBMS_SQL.NUMBER_TABLE」などの DBMS_SQLパッケージのTABLE型。 ArrayDescriptor.createDescriptor() にて、 「名前パターンが無効です」というOracleの例外が発生。プロシージャパラメータとして直接定義されていないTABLE型。 ALL_ARGUMENTS から情報が取得できないため、要素型が 判断できない。(ALL_TYPES では要素型が不明)追記(2010/11/29): ALL_COLL_TYPES を利用することでこの制限はなくなりました。 念のため、ALL_ARGUMENTS を利用するやり方も保険的に 残しています。(ALL_COLL_TYPES が利用できない環境のために) やり方もわからなければ、これ以上突っ込む時間もないので、 とりあえずはペンディングという感じです。 でも、やり方がわかった時点で対応はしたいと考えています。 (実現しやすいものであれば) @DBFlute-0.9.7.6, Java, Oracle