sql >> Databasteknik >  >> RDS >> Oracle

Skickar in kommaavgränsade värden till WHERE-satsen i Oracles lagrade procedur

I stället för att skicka in en enda sträng som består av kommaseparerade värden, skulle du helst skicka i en samling. Om du har något liknande

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

sedan kan du skicka in samlingen till din procedur och använda den i en WHERE klausul

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;

Om du verkligen behöver skicka in en kommaseparerad sträng kan du definiera samma samlingstyp och sedan analysera strängen för att fylla samlingen med något som Tom Kytes str2tbl funktion . Men det kommer att vara mindre effektivt än att skicka in en samling till att börja med.



  1. Distribuerar MySQL Galera Cluster 4.0 på Amazon AWS EC2

  2. Din ultimata guide till SQL Joins:OUTER JOIN – Del 2

  3. logga mysql-uppdateringar

  4. mySQL returnerar alla rader när field=0