ODP.Net expone la capacidad de pasar matrices asociativas como parámetros en un procedimiento almacenado de Oracle desde C#. Es una buena característica a menos que intente utilizar los datos contenidos en esa matriz asociativa en una consulta sql.Cómo usar una matriz asociativa de Oracle en una consulta SQL
La razón de esto es que requiere un cambio de contexto: las sentencias de SQL requieren tipos de SQL y una matriz asociativa pasada a PL/SQL, como esto realmente se define como un tipo de PL/SQL. Creo que cualquier tipo definido dentro de un paquete/procedimiento/función PL/SQL son tipos PL/SQL, mientras que un tipo creado fuera de estos objetos es un tipo SQL (si puede proporcionar más claridad sobre eso, por favor, pero no es el objetivo de este pregunta).
Entonces, la pregunta es, ¿cuáles son los métodos que usaría para convertir la matriz asociativa parámetro PL/SQL en algo que en el procedimiento se puede utilizar en una instrucción SQL como esto:
OPEN refCursor FOR
SELECT T.*
FROM SOME_TABLE T,
(SELECT COLUMN_VALUE V
FROM TABLE(associativeArray)
) T2
WHERE T.NAME = T2.V;
Para a los fines de este ejemplo, el "array asociativo" es una tabla simple de varchar2 (200) indexada por PLS_INTEGER. En C#, el parámetro Array asociativo se rellena con una cadena [].
Siéntase libre de discutir otras formas de hacer esto además de usar una matriz asociativa, pero sepa con anticipación que esas soluciones no serán aceptadas. Aún así, estoy interesado en ver otras opciones.
Ver aquí para una solución similar + problema similar: http://stackoverflow.com/questions/1625649/oracle- parameters-with-in-statement/1655743 # 1655743 – tuinstoel