结合数组绑定和关联数组

时间:2011-12-22 18:42:24

标签: c# oracle oracle10g odp.net

我想使用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示例和示例代码(但是它的单独示例)。 感谢

2 个答案:

答案 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,第二个是关联数组。