odp.net使用用户定义参数的输出参数运行oracle存储过程

时间:2013-10-03 19:39:07

标签: c# oracle odp.net

此过程的地址为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调用程序,工作正常。如何使用用户定义类型的输出参数调用过程?

1 个答案:

答案 0 :(得分:0)

您将无法使用程序包定义的记录数据类型作为ODP.NET的参数。您可以使用数据库定义的类型(即使用CREATE TYPE语句定义),但回答如何执行此操作超出了您的问题范围。

因此,您的选项是创建数据库定义的类型(并学习如何使用ODP.NET的抽象数据类型API或将过程参数列表更改为分解包定义的记录数据类型的主要数据类型。