AFAIK no, thats not possible. Trong khi Firebird có loại dữ liệu mảng, hỗ trợ cho nó là thô sơ và sử dụng mảng thường không được khuyến cáo. Tôi nghĩ rằng giải pháp đơn giản nhất để vượt qua các mảng như (dấu phẩy tách ra) chuỗi và sau đó sử dụng câu lệnh for execute statement
để có được những resultset, một cái gì đó giống như
create procedure CITY (INPUT_LIST_ID varchar(1024))
returns(...)
as
begin
for execute statement
'select ... from T where ID_CITY IN ('|| INPUT_LIST_ID ||')' into ...
do begin
suspend;
end
end
Điều này có nghĩa tuy nhiên rằng tuyên bố bạn sử dụng để có được kết quả cũng thay đổi, thay vì WHERE
bạn sẽ sử dụng các tham số của thủ tục lưu trữ CITY
:
SELECT * FROM CITY('1, 2, 12, 45, 75, 45')
Một lựa chọn khác để gửi danh sách tham số là sử dụng global temporary table. Điều này có pro mà bạn có thể gửi số lượng lớn các ID mà không vượt quá mức tối đa cho phép báo cáo kích thước nhưng nó là nhiều việc để thiết lập cuộc gọi ...
create global temporary table SP_CITY_PARAMS (
id int not null primary key
)
on commit delete rows;
create procedure CITY
returns(...)
as
begin
for select ... from T where ID_CITY IN (
select id from SP_CITY_PARAMS
) into ...
do begin
suspend;
end
end
Tôi nghĩ nó hoạt động, nhưng tôi có hơn 10.000 thành phố trong cơ sở dữ liệu của mình. – dataol
@dataol Bạn có muốn vượt qua tất cả? Tại sao không chỉ tham gia vào bảng chứa những thành phố này? –
@MarkRotteveel Không phải tất cả, chỉ là các bản ghi đã chọn. Nhưng người dùng có thể chọn 1 hoặc 10.000 thành phố. – dataol