1

次のようなストアドプロシージャがあります。

TYPE ref_cursor IS REF CURSOR;    
TYPE parametro IS RECORD (
    nombre      VARCHAR2(50), -- I want to remove this value and make it the key of the table instead.
    valor       VARCHAR2(32000),
    tipo        VARCHAR2(1),
    sentencia   VARCHAR2(32000)
);
TYPE parametros IS TABLE OF parametro INDEX BY VARCHAR2(50);

PROCEDURE build_cursor (
    params IN parametros
    results OUT ref_cursor
);

そして、build_cursorプロシージャから、そのキーでテーブルの内容にアクセスできるようにしたいと思います。

parametros('key');

ただし、Javaから連想配列を作成する方法がわかりません。単純な配列の例しか見ていません。つまり、次のようになります。TYPE parametros IS TABLE OF parametro;

build_cursorJavaからプロシージャを呼び出すにはどうすればよいですか?

私はこれを読みました:Javaでユーザー定義型を含むOracleストアドプロシージャを呼び出す方法は?しかし、連想配列を作成するために彼のJavaの例にどのような変更を加える必要があるのか​​わかりません。現在の要素のキーはどこに置きますか?

これは、Oracleによる実用的なテストです。

params('key').nombre        := 'key'; -- I want this to be removed because it's the key.
params('key').valor         := 'Roger';
params('key').tipo          := 'V';
params('key').sentencia     := 'Something';
-- Call the procedure
pk_sql_utils.build_cursor(
    params => params,
    results => :results
);
4

1 に答える 1

2

jdbcPL / SQLオブジェクトではなく、SQLオブジェクトのみを参照できます。連想配列はPL/SQLオブジェクトであるため、からそれらを「見る」ことはできませんjdbc

SQLオブジェクトでラッパーPL/SQL関数を使用できます(連想配列は、1つのネストされた索引表と1つのネストされた値表に類似しています)。

一時表を使用することもできます。jdbcバッチが一時表に挿入され、ラッパー・プロシージャ(またはPL / SQLブロック)が一時表を読み取り、プロシージャを呼び出します。

于 2012-10-05T08:12:58.990 に答える