Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Enviando valores delimitados por vírgula para a cláusula WHERE no procedimento armazenado oracle


Idealmente, em vez de passar uma única string composta de valores separados por vírgulas, você passaria uma coleção. Se você tem algo como
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

então você pode passar essa coleção para o seu procedimento e usá-la em um WHERE cláusula
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 você realmente precisar passar uma string separada por vírgula, poderá definir o mesmo tipo de coleção e analisar a string para preencher a coleção usando algo como Tom Kyte str2tbl função . Mas isso será menos eficiente do que passar uma coleção para começar.