- 카테고리:
GENERATOR¶
지정된 행 수, 지정된 생성 기간(초), 또는 둘 다를 기반으로 데이터 행을 만듭니다. 이 시스템 정의 테이블 함수는 가상 행 생성을 활성화합니다.
열은 0개이지만 행은 많을 수도 있는 가상 테이블을 생성할 수 있습니다. 이러한 가상 테이블은 SELECT 절이 전적으로 데이터 생성 함수로 구성된 쿼리에 유용합니다.
구문¶
GENERATOR( ROWCOUNT => <count> [ , TIMELIMIT => <sec> ] )
GENERATOR( [ TIMELIMIT => <sec> ] )
사용법 노트¶
count
및sec
은 음이 아닌 정수 상수여야 합니다.ROWCOUNT
인자만 지정된 경우, 결과 테이블에는count
행이 포함됩니다.TIMELIMIT
인자만 지정된 경우, 쿼리는sec
초 동안 실행되어, 시간 프레임 내에서 가능한 한 많은 행을 생성합니다. 정확한 행 수는 시스템 속도에 따라 달라지며 완전히 결정적이지는 않습니다.ROWCOUNT
및TIMELIMIT
인자가 모두 지정된 경우:TIMELIMIT
전에ROWCOUNT
에 도달하면 결과 테이블에count
행이 포함됩니다.ROWCOUNT
전에TIMELIMIT
에 도달하면 테이블에는 시간 프레임 내에 생성된 행 수가 포함됩니다. 정확한 행 수는 시스템 속도에 따라 달라지며 완전히 결정적이지는 않습니다.
ROWCOUNT
또는TIMELIMIT
가 null이면 무시됩니다. 따라서generator(ROWCOUNT => null)
은 0개의 행을 생성합니다.두 매개 변수(
ROWCOUNT
및TIMELIMIT
)가 모두 생략되면 GENERATOR 함수는 0개의 행을 반환합니다.행의 내용은 GENERATOR 함수 자체가 아니라 프로젝션 절의 함수에 의해 결정됩니다. 자세한 내용은 아래의 예 섹션을 참조하십시오. 또한, 프로젝션 절에서 사용하려는 특정 함수(예: SEQ())에 대한 설명을 참조하십시오. 모든 유효한 함수가 갭 없는 시퀀스를 생성하는 것은 아닙니다.
예¶
참고
이러한 예는 갭이 있을 수 있는 시퀀스를 생성합니다. 간격 없이 시퀀스를 생성하는 예는 SEQ1 / SEQ2 / SEQ4 / SEQ8 및 ROW_NUMBER 섹션을 참조하십시오.
이 예에서는 GENERATOR 함수를 사용하여 10개의 행을 생성합니다. 행의 내용은 프로젝션 절의 함수에 의해 결정됩니다.
SEQ4() 열은 0부터 시작하는 4바이트 정수 시퀀스를 생성합니다.
UNIFORM(…) 열은 함수 또는 세 번째 매개 변수로서 전달된 상수를 기반으로 첫 번째 매개 변수(1)와 두 번째 매개 변수(10) 사이의 값을 생성합니다.
이 예에는 출력이 일관되도록 RANDOM() 함수에 대한 선택적 “시드”가 포함됩니다.
SELECT seq4(), uniform(1, 10, RANDOM(12)) FROM TABLE(GENERATOR(ROWCOUNT => 10)) v ORDER BY 1; +--------+----------------------------+ | SEQ4() | UNIFORM(1, 10, RANDOM(12)) | |--------+----------------------------| | 0 | 7 | | 1 | 2 | | 2 | 5 | | 3 | 9 | | 4 | 6 | | 5 | 9 | | 6 | 9 | | 7 | 5 | | 8 | 3 | | 9 | 8 | +--------+----------------------------+
이 예는 UNIFORM
함수에 세 번째 매개 변수로서 함수가 아닌 상수를 전달한다는 점을 제외하고는 앞의 예와 유사합니다. 결과는 UNIFORM
열의 출력이 모든 행에 대해 동일하다는 것입니다.
SELECT seq4(), uniform(1, 10, 42) FROM TABLE(GENERATOR(ROWCOUNT => 10)) v ORDER BY 1; +--------+--------------------+ | SEQ4() | UNIFORM(1, 10, 42) | |--------+--------------------| | 0 | 10 | | 1 | 10 | | 2 | 10 | | 3 | 10 | | 4 | 10 | | 5 | 10 | | 6 | 10 | | 7 | 10 | | 8 | 10 | | 9 | 10 | +--------+--------------------+
ROWCOUNT
및 TIMELIMIT
매개 변수를 모두 생략하면 출력은 0행입니다.
SELECT seq4(), uniform(1, 10, RANDOM(12)) FROM TABLE(GENERATOR()) v ORDER BY 1; +--------+----------------------------+ | SEQ4() | UNIFORM(1, 10, RANDOM(12)) | |--------+----------------------------| +--------+----------------------------+
다음 예에서는 ROWCOUNT
매개 변수 없이 TIMELIMIT
매개 변수를 사용합니다.
SELECT COUNT(seq4()) FROM TABLE(GENERATOR(TIMELIMIT => 10)) v;
+---------------+
| COUNT(SEQ4()) |
|---------------|
| 3615440896 |
+---------------+