Oracle
 sql >> Database >  >> RDS >> Oracle

Invio di valori delimitati da virgole alla clausola WHERE nella stored procedure di Oracle

Idealmente, invece di passare una singola stringa composta da valori separati da virgole, dovresti passare in una raccolta. Se hai qualcosa come

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

quindi potresti passare quella raccolta nella tua procedura e usarla in un WHERE clausola

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;

Se hai davvero bisogno di passare una stringa separata da virgole, puoi definire lo stesso tipo di raccolta e quindi analizzare la stringa per popolare la raccolta utilizzando qualcosa come Tom Kyte str2tbl funzione . Ma sarà meno efficiente che passare una raccolta per cominciare.