Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle używa ciągu znaków w warunku IN

in jest używany z collections , więc najpierw należy przekonwertować ciąg wejściowy na collection (poprzez podział na wiersze na podstawie przecinka)

Wypróbuj coś takiego

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

przy okazji, ten org_id in () zwróci true jeśli :input_id jest null .

Inne podejście byłoby najpierw skonstruować całe zapytanie jako ciąg, a następnie wykonać je za pomocą execute immediate lub przez php . Może to jednak spowodować wstrzyknięcie sql obawy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bitowe wyłączne OR w Oracle

  2. Dlaczego potrzebne jest tutaj WYKONANIE NATYCHMIASTOWE?

  3. Wstaw zapytanie w Oracle:Nieprawidłowa nazwa tabeli

  4. Oracle SQL — sumowanie i grupowanie danych według tygodnia

  5. Cienki sterownik Oracle a sterownik OCI. Plusy i minusy?