sql >> Databasteknik >  >> RDS >> Oracle

Fråga med kommaseparerade IN-parametrar i 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);

GILLA operatören skulle misslyckas i ovanstående fråga. Du måste använda IN , som internt skulle utvärderas som flera ELLER .

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

Även angående varierande IN-lista , ta en titt på mitt svar här .

Uppdatera

Baserat på OP:s kommentarer.

Ändra frågan som:

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
                 );


  1. Oracle SQL jämför datum

  2. MySql Hur man ställer in en lokal variabel i en uppdateringssats (syntax?)

  3. MS Access Corruption Del 2:Bästa metoder för förebyggande och återhämtning

  4. Hur man lägger till flera kryssrutor till min databas med php