AFAIK nein, das ist nicht möglich. Während Firebird Array-Datentyp hat, ist die Unterstützung dafür rudimentär und die Verwendung von Arrays wird im Allgemeinen nicht empfohlen. Ich denke, die einfachste Lösung wäre, das Array als (durch Komma getrennt) Zeichenfolge übergibt und dann verwenden, um die for execute statement
Anweisung, um das Suchresultates zu bekommen, so etwas wie
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
Dies bedeutet jedoch, dass die Aussage, die Sie das Ergebnis zu erhalten verwenden, um auch Änderungen, statt WHERE
würden Sie die Parameter der gespeicherten Prozedur verwenden CITY
:
SELECT * FROM CITY('1, 2, 12, 45, 75, 45')
Eine weitere Möglichkeit der Parameterliste zu senden ist global temporary table zu verwenden. Dies hat den Profi, die Sie sehr große Anzahl von IDs ohne Überschreitung der maximal zulässigen Größe Aussagen senden können, aber es ist mehr Arbeit, um die Verbindung aufzubauen ...
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
Ich denke, es funktioniert, aber ich habe mehr als 10.000 Städte in meiner Datenbank. – dataol
@dataol Möchten Sie alle weitergeben? Warum nicht einfach auf den Tisch mit diesen Städten gehen? –
@MarkRotteveel Nicht alle, nur die ausgewählten Datensätze. Aber ein Benutzer kann 1 oder 10.000 Städte auswählen. – dataol