Comment utiliser un Oracle Tableau Associatif dans une requête SQL

ODP.Net expose la possibilité de passer des Tableaux Associatifs comme params dans une procédure stockée Oracle à partir de C#. Son une belle fonctionnalité, sauf si vous essayez d'utiliser les données contenues dans ce tableau associatif dans une requête sql.

La raison pour cela est qu'il nécessite un changement de contexte - SQL SQL types et un tableau associatif passé en PL/SQL comme ceci est en réalité défini comme un PL/SQL de type. Je pense que les types définis dans un PL/SQL package/procédure/fonction PL/SQL types pendant qu'un type créé à l'extérieur de ces objets est un type SQL (si vous pouvez fournir plus de précisions sur ce, merci de le faire mais ce n'est pas le but de cette question).

Donc, la question est de savoir quelles sont les méthodes que vous pouvez utiliser pour convertir le code PL/SQL tableau associatif param quelque chose qui a à l'intérieur de la procédure peut être utilisée dans une instruction sql comme ceci:

OPEN refCursor FOR
SELECT T.*
FROM   SOME_TABLE T,
       ( SELECT COLUMN_VALUE V
         FROM   TABLE( associativeArray )
       ) T2
WHERE  T.NAME = T2.V;

Pour les besoins de cet exemple, le "associativeArray" est un simple tableau de varchar2(200) indexées par PLS_INTEGER. En C#, la associativeArry param est rempli avec un string[].

N'hésitez pas à discuter d'autres façons de faire cela en plus de l'aide d'un tableau associatif mais savez à l'avance de ces solutions ne seront pas acceptées. Pourtant, je suis intéressé à voir d'autres options.

Voir ici pour un problème similaire + solution similaire: stackoverflow.com/questions/1625649/...

OriginalL'auteur ScottCher | 2009-11-11