ODP.Net 公开了将关联数组作为参数从 C# 传递到 Oracle 存储过程的能力。这是一个很好的功能,除非您尝试在 sql 查询中使用该关联数组中包含的数据。
这样做的原因是它需要上下文切换 - SQL 语句需要 SQL 类型,并且像这样传递到 PL/SQL 的关联数组实际上被定义为 PL/SQL 类型。我相信在 PL/SQL 包/过程/函数中定义的任何类型都是 PL/SQL 类型,而在这些对象之外创建的类型是 SQL 类型(如果您可以更清楚地说明这一点,请这样做,但这不是目标问题)。
因此,问题是,您将使用哪些方法将 PL/SQL 关联数组参数转换为可以在过程中用于 sql 语句的东西,如下所示:
OPEN refCursor FOR
SELECT T.*
FROM SOME_TABLE T,
( SELECT COLUMN_VALUE V
FROM TABLE( associativeArray )
) T2
WHERE T.NAME = T2.V;
对于本示例,“associativeArray”是一个简单的 varchar2(200) 表,由 PLS_INTEGER 索引。在 C# 中,associativeArry 参数由字符串 [] 填充。
随意讨论除了使用关联数组之外的其他方法,但提前知道这些解决方案不会被接受。不过,我有兴趣看到其他选择。