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

Envoi de valeurs délimitées par des virgules à la clause WHERE dans la procédure stockée oracle

Idéalement, plutôt que de transmettre une seule chaîne composée de valeurs séparées par des virgules, vous transmettriez une collection. Si vous avez quelque chose comme

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

alors vous pouvez passer cette collection dans votre procédure et l'utiliser dans un WHERE clause

CREATE OR REPLACE PROCEDURE procedure_name( p_values IN value_tbl )
AS
  ...
BEGIN
  FOR i IN (SELECT *
              FROM table_name
             WHERE column_name IN (SELECT *
                                     FROM TABLE( p_values )))
  LOOP
    ...
  END LOOP;
END;

Si vous avez vraiment besoin de transmettre une chaîne séparée par des virgules, vous pouvez définir le même type de collection, puis analyser la chaîne pour remplir la collection en utilisant quelque chose comme str2tbl de Tom Kyte fonction . Mais ce sera moins efficace que de passer dans une collection pour commencer.