sql >> Databáze >  >> RDS >> Oracle

Oracle používá řetězec uvnitř podmínky IN

in se používá s collections , takže váš vstupní řetězec by měl být nejprve převeden na collection (rozdělením do řádků na základě oddělovače čárkou)

Zkuste něco takového

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

mimochodem, toto org_id in () vrátí true if :input_id je null .

Jiný přístup by bylo nejprve sestavit celý dotaz jako řetězec a poté jej provést buď pomocí execute immediate nebo prostřednictvím php . To by však mohlo zvýšit vložení SQL obavy.



  1. Počítá se Postgresql varchar pomocí délky znaků Unicode nebo délky znaků ASCII?

  2. 10 tipů pro úsporu času pro uživatele MS Access

  3. Jaký je rozdíl mezi MySQL a MySQL2 s ohledem na NodeJS

  4. vícenásobná hodnota hledání v php a mysql