2017-03-12 13 views
4

Firebird select文で範囲を1から100まで作成する方法は?Firebird select文で範囲を1から100まで作成する方法は?

私はすでに文字列をリストに変換する方法を見つけましたが、より大きな範囲のためにHow to input an array parameter of values to Firebird Stored Procedure?を生成する必要があるため、私は機能しません。

ストアドプロシージャを作成せずにこのようなことを行うことはできますか?

答えて

5

が一つの方法は、再帰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

Firebird 2.1以降で動作しますが、1024要素に制限されています。 https://firebirdsql.org/refdocs/langrefupd21-select.html#langrefupd21-select-cteを参照してください。これを超えた場合、「同じリクエストの同時実行が多すぎます」というエラーが表示されます。 –

6

の提案のほかゴードンによって、あなたもこれを達成するために選択可能なストアドプロシージャを使用することができます。

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 

あなたはその後、としてこれを使用することができます。

Gordonが示すようにCTEの利点は、これによりFirebird CTEの再帰制限は1024です。

+0

さらに読みやすい –

関連する問題