odp.net 使用用户定义参数的输出参数运行预言机存储过程
本文关键字:参数 输出 预言机 存储过程 运行 定义 net 用户 odp | 更新日期: 2023-09-27 18:33:44
此过程已address_table 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 开发人员中执行我的存储过程时,一切都工作文件。所以,我的程序有效。我需要调用此过程并在 C# (ASP.NET) 中获取address_table。我正在使用 odp.net。我能够使用 refCursor 调用过程,工作正常。如何使用用户定义类型的输出参数调用过程?
您将无法使用包定义的记录数据类型作为具有 ODP.NET 的参数。您可以使用数据库定义的类型(即,使用 CREATE TYPE 语句定义),但回答如何执行此操作超出了您的问题范围。
因此,您的选项是创建数据库定义的类型(并了解如何使用 ODP.NET 的抽象数据类型 API 或将过程参数列表更改为分解包定义的记录数据类型的原始数据类型。