Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle използва низ в състояние IN

in се използва с collections , така че вашият въведен низ първо трябва да бъде преобразуван в collection (чрез разделяне на редове въз основа на разделител със запетая)

Опитайте нещо подобно

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

между другото, този org_id in () ще върне true if :input_id е null .

Друг подход би било първо да се конструира цялата заявка като низ и след това да се изпълни с execute immediate или чрез php . Това обаче може да доведе до sql инжектиране опасения.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете увеличаващи се колони?

  2. Конвертиране на скрипт Coldfusion в изглед на Oracle с CASE и итерация

  3. как да изберете най-често появяващите се стойности?

  4. Как да поръчате по дата в PostgreSQL или Oracle

  5. Oracle SQL заявка - генериране на записи между две дати