2016-09-28 56 views

回答

2

這個工作對我來說:

create or alter procedure GET_INTEGER_RANGE (
INICIO integer, 
FIN integer) 
returns (
    ACTUAL integer) 
AS 
begin 
    actual = inicio; 
    while (actual<=fin) do 
    begin 
     suspend; 
     actual = actual +1; 
    end 
end 

SELECT * FROM GET_INTEGER_RANGE(6000000,7500000); 
1

不知道這是最快的,但它是唯一我能想到的方式:

with recursive numbers (nr) as (
    select 6000000 
    from rdb$database 
    union all 
    select nr + 1 
    from numbers 
    where nr < 7500000 
) 
select * 
from numbers; 

更新:正如franbenz在評論中指出的那樣,Firebird僅限於1024的遞歸深度,顯然無法改變。所以雖然基本的語法是正確的,但當試圖生成多於1​​024行時,上述方法將不起作用。

+0

據火鳥2.1語言參考,最大遞歸深度是1024這是影響範圍爲執行上述1024 – franbenz

+0

@franbenz:啊,謝謝。我並不知道這個限制。那當然這沒有幫助。 –