Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment transmettre dynamiquement des valeurs à l'opérateur IN ?

Créez un type de collecte :

CREATE TYPE stringlist IS TABLE OF VARCHAR2(100);
/

Ensuite, vous pouvez le passer à une procédure et utiliser le MEMBER OF opérateur (plutôt que le IN opérateur):

CREATE PROCEDURE Test (
  in_list     IN  stringlist,
  out_results OUT SYS_REFCURSOR
)
IS
BEGIN
  OPEN out_results FOR
  SELECT *
  FROM   your_table
  WHERE  your_column MEMBER OF in_list;
END;
/

Si vous vous connectez à partir d'un langage externe, vous pouvez passer assez facilement un tableau à la procédure (exemple Java) ou vous pouvez créer la liste en PL/SQL ou à partir d'une liste délimitée.