Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Senden von kommagetrennten Werten an die WHERE-Klausel in der gespeicherten Oracle-Prozedur

Im Idealfall übergeben Sie anstelle einer einzelnen Zeichenfolge, die aus durch Kommas getrennten Werten besteht, eine Sammlung. Wenn Sie so etwas wie

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

dann könnten Sie diese Sammlung an Ihre Prozedur übergeben und sie in einem WHERE verwenden Klausel

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;

Wenn Sie wirklich eine durch Kommas getrennte Zeichenfolge übergeben müssen, können Sie denselben Sammlungstyp definieren und dann die Zeichenfolge analysieren, um die Sammlung mit etwas wie Tom Kytes str2tbl Funktion . Aber das wird weniger effizient sein, als zunächst eine Sammlung zu übergeben.