sql >> Databasteknik >  >> RDS >> Oracle

Oracle använder en sträng i IN-tillstånd

in används med collections , så din inmatningssträng bör först konverteras till collection (genom att dela upp i rader, baserat på kommaavgränsare)

Prova något sånt här

Select * from employ where id = 12 and org_id in (
SELECT decode(:input_id,null,  (select  employ.org_id from dual) 
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )  
    FROM (SELECT  :input_id temp FROM DUAL)
    CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
    )

förresten, detta org_id in () returnerar true om :input_id är null .

Ett annat tillvägagångssätt skulle vara att konstruera hela frågan som en sträng först och sedan köra den antingen med execute immediate eller genom php . Detta kan dock öka sql-injektion bekymmer.



  1. bygga en dynamisk SQL-fråga med psycopg2 python-bibliotek och använda bra konverteringsverktyg

  2. Det gick inte att ladda sqlite-databasen vid första körningen

  3. Skapa Java på Oracle-databas med JDBC

  4. mysql:Vad är rätt syntax för NOT LIKE?