2

ネストされたテーブルであるいくつかのパラメーターを持つストアド プロシージャがあります。

CREATE TYPE FOO_ARRAY AS TABLE OF NUMBER;
CREATE TYPE BAR_ARRAY AS TABLE OF INTEGER;

CREATE PROCEDURE Blah(
  iFoos IN FOO_ARRAY,
  iBars IN BAR_ARRAY,
  oResults OUT SOMECURSORTYPE
) AS
BEGIN
  OPEN oResults FOR
    SELECT *
    FROM SomeTable T
    JOIN TABLE(iFoos) foos ON foos.column_value = T.foo
    JOIN TABLE(iBars) bars ON bars.column_value = T.bar;    
END

ODP.NET (Oracle.DataAccess.dll) を使用して、このストアド プロシージャを呼び出して配列をこれらのパラメータに渡す方法はありますか? 配列を渡す唯一の方法は、パラメーターの型が連想配列 (SQL 内でアクセスできない別の型のコレクション) である場合です。

4

2 に答える 2

1

私はそれをこのように機能させました:

  • 「TYPENT_LNGISTABLE OF varchar(2);を作成または置換する」のようなタイプをデータベースに作成します。
  • IOracleCustomTypeおよびINullable(SimpleStringArray)を実装するクラスを作成します
  • IOracleCustomTypeFactory(SimpleStringArrayFactory)を実装するクラスを作成します。この属性「[OracleCustomTypeMappingAttribute( "KNL.NT_LNG")]」でマークします

そして、次のようにパラメータを渡します。

 SimpleStringArray sa1 = new SimpleStringArray();
 sa1.Array = new String[]{"aaa","bbb"};
 OracleParameter param = new OracleParameter("p_lngsrc", OracleDbType.Array, sa1, ParameterDirection.Input);
 param.UdtTypeName = "KNL.NT_LNG";

幸運を

于 2011-04-06T07:43:39.313 に答える
1

Oracle は、ネストされたテーブル タイプにマップするカスタム .NET クラスを生成するための無料ツールも提供しています。

「Oracle Developer Tools for Visual Studio」(無料)をダウンロードし、サーバー・エクスプローラーを開き、「ユーザー定義型」ノードを開き、ユーザー定義型を見つけ、右クリックして「カスタム・クラスの生成」を選択します。

一般的な UDT の使用を開始するためのチュートリアルを次に示します。

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/hol08/dotnet/udt/udt_otn.htm

于 2011-04-06T14:07:33.533 に答える