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

Oracle verwendet eine Zeichenfolge innerhalb der IN-Bedingung

in wird mit collections verwendet , also sollte Ihre Eingabezeichenfolge zuerst in collection konvertiert werden (durch Aufteilen in Zeilen, basierend auf Komma-Trennzeichen)

Versuchen Sie so etwas

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

übrigens diese org_id in () gibt true zurück wenn :input_id ist null .

Ein anderer Ansatz wäre, die ganze Abfrage zuerst als String zu konstruieren und sie dann entweder mit execute immediate auszuführen oder über php . Dies könnte jedoch sql injection auslösen Bedenken.