【发布时间】:2010-12-15 12:24:56
【问题描述】:
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 参数由字符串[] 填充。
请随意讨论除了使用关联数组之外的其他方法,但请提前知道这些解决方案不会被接受。不过,我有兴趣查看其他选项。
【问题讨论】:
-
类似问题+类似解决方案见这里:stackoverflow.com/questions/1625649/…
标签: sql oracle plsql associative-array odp.net