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

Indsendelse af kommaseparerede værdier til WHERE-sætning i oracles lagrede procedure

Ideelt set, i stedet for at sende en enkelt streng sammensat af kommaseparerede værdier, ville du sende i en samling. Hvis du har noget lignende

CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);

så kan du overføre denne samling til din procedure og bruge 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;

Hvis du virkelig har brug for at indsætte en kommasepareret streng, kan du definere den samme samlingstype og derefter parse strengen for at udfylde samlingen ved at bruge noget som Tom Kytes str2tbl funktion . Men det vil være mindre effektivt end at sende en samling til at starte med.



  1. Konverter en byte-kolonne til OID, mens du beholder værdier

  2. Forespørgselsprofilering 101 — Ja, det kan virkelig forbedre din SQL Server-ydeevne

  3. SQL-forespørgsel for at få alle værdier en enum kan have

  4. Hvordan gemmer man ikke-engelske tegn?