ODP.Net предоставляет возможность передавать ассоциативные массивы как параметры в хранимую процедуру Oracle из C #. Это хорошая возможность, если вы не пытаетесь использовать данные, содержащиеся в этом ассоциативном массиве, в 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;
Для целей этого примера "ассоциативный массив" представляет собой простую таблицу varchar2 (200), проиндексированную PLS_INTEGER. В C # параметр ассоциативного Arry заполняется строкой [].
Не стесняйтесь обсуждать другие способы сделать это помимо использования ассоциативного массива, но заранее знайте, что эти решения не будут приняты. Тем не менее, мне интересно увидеть другие варианты.