0

このプロシージャには、address_table out pkg.address_tab_type があります。

create or replace
procedure hr.p_get_address
  (
    in_pid in number,
    address_table out pkg.address_tab_type
  )
as
  address_row pkg.address_rec_type;
  cursor address_cursor is 
    select
      addr.pid, addr.street, addr.city
    from
      hr.address addr
    where
      pid = in_pid;
begin
  row_count := 0;
  open address_cursor;
  loop
    fetch address_cursor into address_row;
    exit when address_cursor%NOTFOUND;
    row_count := row_count + 1;
    address_table(row_count) := address_row;
  end loop;
  close address_cursor;
end p_get_address;

私の pkg はカスタム address_rec_type と address_tab_type を宣言します:

create or replace
package hr.pkg as
  type address_rec_type is
    record
    (
      pid address.pid%type,
      street address.street%type,
      city address.city%type
    );
  type address_tab_type is
    table of address_rec_type index by binary_integer;
end hr.pkg;

SQL Developerでストアドプロシージャを実行すると、すべての作業ファイルが. だから、私の手続き。動作します。このプロシージャを呼び出して、C# (ASP.NET) で address_table を取得する必要があります。私はodp.netを使用しています。refCursor でプロシージャを呼び出すことができ、正常に動作します。ユーザー定義型の出力パラメータを使用してプロシージャを呼び出すにはどうすればよいですか?

4

1 に答える 1

1

パッケージ定義のレコード データ型を ODP.NET のパラメータとして使用することはできません。データベース定義の型 (つまり、CREATE TYPE ステートメントを使用して定義) を使用できますが、その方法に答えるのは質問の範囲外です。

したがって、オプションは、データベース定義の型を作成することです (そして、ODP.NET の抽象データ型 API を使用する方法、またはパッケージ定義のレコード データ型のプリミティブ データ型の分解としてプロシージャのパラメーター リストを変更する方法を学習します。

于 2013-10-03T20:20:22.443 に答える