ODP.Net公开了将关联数组作为参数从C#传递到Oracle存储过程的能力。这是一个很好的特性,除非您试图在sql查询中使用该关联数组中包含的数据。
这是因为它需要一个上下文切换- SQL语句需要SQL类型,并且像这样传递到PL/SQL的关联数组实际上被定义为PL/SQL类型。我相信在PL/SQL包/过程/函数中定义的任何类型都是PL/SQL类型,而在这些对象之外创建的类型是SQL类型(如果您可以提供更多的说明,请这样做,但这不是这个问题的目的)。
因此,问题是,您将使用哪些方法将PL/SQL关联数组param转换为在过程中可以在如下sql语句中使用的内容:
OPEN refCursor FOR
SELECT T.*
FROM SOME_TABLE T,
( SELECT COLUMN_VALUE V
FROM TABLE( associativeArray )
) T2
WHERE T.NAME = T2.V;就本例而言,"associativeArray“是由PLS_INTEGER索引的varchar2(200)的一个简单表。在C#中,associativeArry参数由一个string[]填充。
除了使用关联数组之外,还可以讨论其他方法,但是提前知道这些解决方案不会被接受。不过,我还是对其他选择感兴趣。。
发布于 2009-11-11 16:10:12
我会创建这样一个数据库类型:
create type v2t as table of varchar2(30);
/然后在程序中:
FOR i IN 1..associativeArray.COUNT LOOP
databaseArray.extend(1);
databaseArray(i) := associativeArray(i);
END LOOP;
OPEN refCursor FOR
SELECT T.*
FROM SOME_TABLE T,
( SELECT COLUMN_VALUE V
FROM TABLE( databaseArray )
) T2
WHERE T.NAME = T2.V;(其中databaseArray被声明为v2t类型)。
https://stackoverflow.com/questions/1715978
复制相似问题