【发布时间】:2019-12-06 04:16:24
【问题描述】:
我需要从 Oracle 存储过程(包内)中取回一个定义为用户集合类型对象(表)的输出参数。
Procedure GetCon (DataRif IN VARCHAR2,Results OUT my_collectiontype)
IS
BEGIN
select my_ObjectType(Col1,Col2)
bulk collect into Results
FROM
TABLE(PMS.myfunc(DataRif ,'31-12-2019');
END;
....
函数 PMS.myfunc 返回一个 my_collectiontype 对象
在我的代码(带有 Oracle ManagedDataAccess 驱动程序的 Asp.net 4.0 VB.NET)中,我已经尝试过
strConn = "Data Source=XE.WORK;User Id=PMS;Password=xxxx"
Dim con As New OracleConnection(strConn)
Dim dt As DataTable = New DataTable()
Dim da As OracleDataAdapter = New OracleDataAdapter()
con.Open()
Dim cmd As New OracleCommand()
cmd.Connection = con
cmd.CommandText = "MySchema.MyPackage.GetCon"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("DataRif", OracleDbType.Varchar2,"23-07-2019", ParameterDirection.Input)
cmd.Parameters.Add("Results", OracleDbType.RefCursor).Direction = ParameterDirection.Output
da.SelectCommand = cmd
cmd.ExecuteNonQuery()
da.Fill(dt)
.....
我收到此错误
ORA-06550:第 1 行,第 7 列:PLS-00306:调用“GETCONT”时参数的数量或类型错误
ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略"
确定 out 参数不是引用光标,但我找不到正确的对象。
我需要使用存储过程,因为我知道它可以作为简单视图执行类似的操作
SELECT * FROM TABLE (PMS.myfunc('01-01-2019', '31-12-2019')
但这个解决方案目前不是最好的。
提前致谢。
【问题讨论】:
-
尝试以大写形式指定过程和参数名称,例如使用
"MYSCHEMA.MYPACKAGE.GETCON"、"DATARIF"和"RESULTS"。在内部,Oracle 以大写形式存储所有名称。
标签: asp.net oracle stored-procedures