2009-08-24 15 views
3

私は、Oracle 10gのPL/SQLの関数として、このJavaメソッド場合と同等を作成したいと思います:どのようにOracle PL/SQL関数にマップを渡すか?

String myMethod(int par1, Map<String, Object> par2); 

はそれは、Oracle PL/SQL関数にマップ(またはいくつかのsimillar構造)を渡すことは可能ですか? Javaからこの関数を何とか呼び出せなければなりません。

答えて

5

JavaオブジェクトをOracleに渡す方法については、interesting discussion on AskTomがあります。特にIMO、この優れたadvice from Tom Kyteで:

私、私はコミット削除行にグローバル一時表のGTT( FNAMEのVARCHAR2(20)、LNAMEのVARCHAR2(20) )を作成

を日科技連でしょう。

をjava app BATCHに挿入し、プロシージャを呼び出すと、 プロシージャはそのテーブル のデータを入力として使用します。

こと、私の経験では、「私」の間のコードの少なくとも 量であり、

を「 が終了している」、すなわち:ただのjavaでそれに書き込む、リレーショナル一時テーブルのセットを使用し、 pl/sqlをテーブルから読み込ませます。おそらくオブジェクトを渡すほど効率的ですが、実装とデバッグが容易になります。複雑なオブジェクトのための基本的

+0

テンポラリテーブルは私が入力したものだけです/ +:あなたはそれを打ちました。 組み込み関数を使用してそれを行う退屈な方法もあります。 – Everyone

1

Down this pathは恐怖と絶望です。見たことあります。

+0

これは大きな誇張です。私はPL/SQLとJavaオブジェクトの間のJPublisher変換を扱っています。これまで使用していない開発者がピックアップするのは簡単です。 –

+0

+1用: – Seki

1

読むthis article on JDBC interface for Oracle collections first

自動的にJavaクラスと定型的なコードを生成するためにJPublisherを使用する必要があります。それ以外の場合は、単純なoracle.sql.ARRAYを実行する必要があります。

一致するPL/SQLオブジェクトも作成する必要があります。this articleを参照してください。 JavaとOracleの間でデータを渡すだけのMEMBERメソッドを実装する必要はありません。


編集1:残念ながら、PL/SQLにはJavaのようなMapコンセプトはありません。ただし、マップを特殊な(Key、Value)オブジェクトとして、または単純なクラス(ハッシュマップのような並べ替え)のIndex-byテーブルとしてモデル化できます。

+0

私が正しく理解していれば、これは要素のコレクションを関数に渡す方法です。私が必要とするのは地図を渡すことです。私は、このマップのキーまたはエントリの数を知らない。このようにすることができますか? –

関連する問題