是否可以调用记录类型为IN参数的Oracle存储过程?
在Oracle中,我有一个记录定义:
TYPE R_InData_tab IS RECORD ( ... );
TYPE InData_tab IS TABLE OF R_InData_tab INDEX BY BINARY_INTEGER;
现在我想将此记录类型设置为参数:
PROCEDURE myProcedure (inRecord IN myPackage.InData_tab);
从我的C#代码中调用此过程。
有没有人有想法?
由于
答案 0 :(得分:1)
我认为您仅限于OracleType中定义的内置Oracle类型。如果是这样,您将不得不编写一个采用常规参数的存储过程,构造类型值并调用原始过程。
答案 1 :(得分:1)
你可以通过发送一个代码块作为语句来实现这一点(自从我使用Oracle以来已经有一段时间了,所以语法可能略有偏差:
DECLARE
param indata_tab;
BEGIN
FOR i IN 1 .. :field1%COUNT LOOP
param(i).field1 := :field1(i);
param(i).field2 := :field2(i);
END LOOP;
myProcedure(param);
END;
然后将field1和field2参数绑定到数组。
答案 2 :(得分:0)
如果你正在使用Oracle Data Provider for .NET(ODP.NET),那么在不使用erikkallen建议的按摩的情况下,call the procedure directly肯定是可能的。
但是,我不确定这会解决您的问题。看起来您正在定义包含该过程的包中的类型。为了使用上面链接的方法,需要使用DDL将数据类型创建为数据库中的单独对象:
CREATE TYPE R_InData_tab AS OBJECT ( ... );
CREATE TYPE InData_tab AS TABLE OF R_InData_tab;
这可能需要对包进行一些细微的更改,因为不支持INDEX BY类型作为模式对象,因此需要使用嵌套表(或varrays)。