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

Abfrage mit kommagetrennten IN-Parametern in PLSQL

SELECT * FROM Table1 WHERE   
Table1.PRODUCT LIKE ( select regexp_substr(I_PRODUCT,'[^,]+', 1, level) from dual
                     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null);

Das LIKE Operator würde in obiger Abfrage fehlschlagen. Sie müssen IN verwenden , die intern als mehrfaches ODER ausgewertet würden .

Table1.PRODUCT IN ( select regexp_substr(I_PRODUCT,'[^,]+', 1, level) from dual
                     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null);

Auch in Bezug auf variierende IN-Liste , schau dir meine Antwort hier an .

Aktualisieren

Basierend auf den Kommentaren von OP.

Ändern Sie die Abfrage wie folgt:

WITH str_search AS
(
     select regexp_substr(I_PRODUCT,'[^,]+', 1, level) pattern from dual
     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null
)
SELECT   *
FROM     Table1
WHERE     EXISTS (
          SELECT     NULL
          FROM     str_search
          WHERE     tab.col     LIKE pattern
                 );