Firebird select文で範囲を1から100まで作成する方法は?Firebird select文で範囲を1から100まで作成する方法は?
私はすでに文字列をリストに変換する方法を見つけましたが、より大きな範囲のためにHow to input an array parameter of values to Firebird Stored Procedure?を生成する必要があるため、私は機能しません。
ストアドプロシージャを作成せずにこのようなことを行うことはできますか?
Firebird select文で範囲を1から100まで作成する方法は?Firebird select文で範囲を1から100まで作成する方法は?
私はすでに文字列をリストに変換する方法を見つけましたが、より大きな範囲のためにHow to input an array parameter of values to Firebird Stored Procedure?を生成する必要があるため、私は機能しません。
ストアドプロシージャを作成せずにこのようなことを行うことはできますか?
が一つの方法は、再帰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;
の提案のほかゴードンによって、あなたもこれを達成するために選択可能なストアドプロシージャを使用することができます。
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です。
さらに読みやすい –
Firebird 2.1以降で動作しますが、1024要素に制限されています。 https://firebirdsql.org/refdocs/langrefupd21-select.html#langrefupd21-select-cteを参照してください。これを超えた場合、「同じリクエストの同時実行が多すぎます」というエラーが表示されます。 –