sql >> Base de Datos >  >> RDS >> Oracle

Envío de valores delimitados por comas a la cláusula WHERE en el procedimiento almacenado de Oracle

Idealmente, en lugar de pasar una sola cadena compuesta de valores separados por comas, pasaría una colección. Si tienes algo como

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

entonces podría pasar esa colección a su procedimiento y usarla en un 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;

Si realmente necesita pasar una cadena separada por comas, puede definir el mismo tipo de colección y luego analizar la cadena para completar la colección usando algo como str2tbl de Tom Kyte función . Pero eso va a ser menos eficiente que pasar una colección para empezar.