Đây không phải là hạn chế của Nhà phát triển SQL mà chỉ là cách các biến liên kết hoạt động. Bạn đang làm một cách hiệu quả:
select count(*) from foo
where foo.id in ('1,2,3')
... thực sự là in (to_number('1,2,3'))
, do đó lỗi. Nó sẽ hoạt động với một giá trị duy nhất, cho kết quả lẻ cho hai giá trị nếu dấu phân tách thập phân của bạn là dấu phẩy và không thành công với bất kỳ giá trị nào khác.
Bạn không thể nhập nhiều giá trị tại dấu nhắc liên kết hoặc cung cấp nhiều giá trị cho một in()
với một ràng buộc duy nhất. Bạn có thể gian lận hãy sáng tạo một chút. xmltable
hàm sẽ chuyển đổi chuỗi được phân tách bằng dấu phẩy thành các hàng với một giá trị trong mỗi:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Sau đó, bạn có thể sử dụng nó làm bảng tra cứu:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3