【发布时间】:2019-02-14 04:13:41
【问题描述】:
我正在尝试调用在 Orracle 包中定义的 Oracle 存储过程。 该过程没有输入参数,只有一个用户定义类型的输出参数。以下是包和 UDT 的详细信息:
CREATE OR REPLACE TYPE obj_systemdetail AS OBJECT
(
sys_id VARCHAR2(8 CHAR),
sys_name VARCHAR2(6 CHAR),
sys_desc VARCHAR2(100 CHAR),
sys_start_date DATE
);
CREATE OR REPLACE TYPE tab_systemdetailslist IS TABLE OF obj_systemdetail
CREATE OR REPLACE PACKAGE pck_sysDetails IS
PROCEDURE get_systemdetails(p_system_details OUT NOCOPY tab_systemdetailslist);
END pck_sysDetails;
尝试从 .net 调用它,如下所示
using Oracle.ManagedDataAccess.Client;
OracleConnection conn = new OracleConnection("User Id=ptTest;Password=p1_sttest;Data Source=STMP231");
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "pck_sysDetails.get_systemdetails";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("p_system_details", OracleDbType.Varchar2)
{
UdtTypeName = "tab_systemdetailslist",
Size = 100,
ArrayBindSize = new int[100],
Direction = ParameterDirection.Output
});
conn.Open();
cmd.ExecuteNonQuery();
可以连接db,但是执行代码时出现这个错误
ORA-06550:调用“GET_SYSTEMDETAILS”时参数的数量或类型错误
尝试了很多搜索,但找不到任何关于如何将此 UDT 类型设置为输出参数的有用信息。
请问有人可以帮我解决这个问题吗?
【问题讨论】:
-
那么当您运行代码时会发生什么?您提供的信息越多,您就越有可能获得及时和有用的回复。 (虽然我怀疑@oldprogrammer 在正确的行上。)
-
执行代码时出现此错误 - ORA-06550: 调用 'GET_SYSTEMDETAILS' @oldprogrammer 时参数的数量或类型错误,感谢您的链接。在我的情况下,我没有任何输入参数所以我该怎么做?我需要映射输出参数吗?我的意思是说我没有像这样设置的输入。 oracleParam.Value = 实体;
-
为了将来参考,请编辑您的问题以包括澄清或附加信息。
-
有人可以帮我吗
标签: c# .net oracle stored-procedures user-defined-types