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

Как да въведете обвързвания за параметър с множество стойности в SQL Developer

Това не е ограничение на SQL Developer, а просто как работят свързващите променливи. Вие ефективно правите:

select count(*) from foo 
where foo.id in ('1,2,3')

... което наистина е in (to_number('1,2,3')) , оттук и грешката. Ще работи за една стойност, ще даде странни резултати за две стойности, ако вашият десетичен разделител е запетая, и ще се провали за нещо повече.

Не можете да въведете множество стойности в подкана за свързване или да предоставите множество стойности на in() с едно обвързване. Можете да изневерявате все пак бъдете малко изобретателни. xmltable ще преобразува разделения със запетаи низ в редове с по една стойност във всеки:

var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);

COLUMN_VALUE
------------
1            
2            
3            

След това можете да го използвате като справочна таблица:

select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);

  COUNT(*)
----------
         3 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:разлика между max(id)+1 и sequence.nextval

  2. Грешка на Oracle Apex 20.1:Грешка при обработката на валидирането

  3. Oracle CONNECT BY рекурсивна заявка за дете към родител, включва краен родител, който се самопрепраща

  4. oracle systimestamp (sysdate) в милисекунди

  5. данни за последните 4 тримесечия