组合阵列绑定和关联数组

本文关键字:关联 数组 绑定 阵列 组合 | 更新日期: 2023-09-27 18:18:33

我想使用ODP从我的c# .net 4代码中调用oracle10g的存储过程"MyStoredProcedure"。净(4.112.2.0)。

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的示例和示例代码(但它是单独的示例)。由于

组合阵列绑定和关联数组

最后必须将数组转换为逗号分隔的字符串,并将其作为参数传递。在我的程序中,我将csv转换回数组

虽然转换为CSV工作,它不是很有效,你被限制在4000个字符。

要达到你想要的效果,最好使用use forall循环

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