我想使用ODP.NET(4.112.2.0)从我的c#.net 4代码中调用oracle10g的存储过程“MyStoredProcedure”。
PACKAGE MyPackage AS
TYPE ids_array IS TABLE OF NUMBER(8) INDEX BY BINARY_INTEGER;
PROCEDURE MyStoredProcedure
(
param1 IN VARCHAR2(10),
param2 IN ids_array
);
END MyPackage;
我知道如何使用数组绑定功能,这样我就可以在一个数据库往返的表中插入多行。
我也知道如何调用具有关联数组作为参数的存储过程。我不知道的是如何将两者结合起来?
我查看了http://docs.oracle.com/html/E10927_01/featOraCommand.htm#i1007888示例和示例代码(但是它的单独示例)。
感谢
答案 0 :(得分:0)
我最终不得不将数组转换为逗号分隔的字符串,并将其作为参数传递。所以在我的proc中我将我的csv转换回数组。
答案 1 :(得分:0)
尽管转换为CSV工作效率不高,但限制为4000个字符。
为了达到你想要的效果,最好使用一个forall循环
e.g。
PACKAGE MyPackage AS
TYPE ids_array IS TABLE OF NUMBER(8) INDEX BY BINARY_INTEGER;
PROCEDURE MyStoredProcedure
(
param1 IN VARCHAR2(10),
param2 IN ids_array
);
/
PACKAGE MyPackage BODY
ENDPROCEDURE MyStoredProcedure
(
param1 IN VARCHAR2(10),
param2 IN ids_array
) AS
BEGIN
forall i in param2.FIRST .. param2.LAST
INSERT INTO TABLE(col1,col2) VALUES (param1, params2(i));
END;
END MyPackage;
在ODP.NET中,您有两个参数,第一个是varchar,第二个是关联数组。