2017-03-12 1 views

Antwort

5

Eine Methode ist eine rekursive CTE:

with recursive n as (
     select 1 as n 
     from rdb$database 
     union all 
     select n.n + 1 
     from n 
     where n < 100 
    ) 
select n.n 
from n; 
+1

Beachten Sie, dass es wie bei Firebird 2.1 funktioniert, aber auf 1024 Elemente beschränkt ist; siehe https://firebirdsql.org/refdocs/langrefupd21-select.html#langrefupd21-select-cte Wenn Sie darüber hinaus gehen, erhalten Sie diesen Fehler: 'Zu viele gleichzeitige Ausführungen derselben Anfrage'. –

6

Neben dem Vorschlag von Gordon, Sie auch einen selektierbaren gespeicherte Prozedur könnte dies zu erreichen:

create procedure generate_range(startvalue integer, endvalue integer) 
    returns (outputvalue integer) 
as 
begin 
    outputvalue = startvalue; 
    suspend; 

    while (outputvalue < endvalue) do 
    begin 
     outputvalue = outputvalue + 1; 
     suspend; 
    end 
end 

Anschließend können Sie diese verwenden, wie:

Der Vorteil gegenüber dem CTE, wie von Gordon gezeigt, ist, dass dies größere Reichweiten ermöglicht, wie Firebird CTEs haben eine Rekursionsgrenze von 1024.

+0

ist es auch besser lesbar –

Verwandte Themen