sql >> Database >  >> RDS >> Oracle

Oracle gebruikt een string in de IN-voorwaarde

in wordt gebruikt met collections , dus uw invoerreeks moet eerst worden geconverteerd naar collection (door op te breken in rijen, gebaseerd op komma scheidingsteken)

Probeer zoiets als dit

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, '[^,]+')
    )

trouwens, deze org_id in () retourneert true if :input_id is null .

Een andere benadering zou zijn om de hele query eerst als een tekenreeks te construeren en deze vervolgens uit te voeren met execute immediate of via php . Dit kan echter leiden tot sql-injectie bedenkingen.



  1. PHP eval() code tussen <?php ?> uit database

  2. Haal MAX uit een GROUP BY

  3. kopieer een kolom van de ene tabel naar de andere

  4. Kan geen nieuwe verbinding maken is sqldeveloepr