2017-03-12 6 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

또한 읽을 수 있습니다. –