- Categorias:
GENERATOR¶
Cria linhas de dados com base em um número especificado de linhas, um período de geração especificado (em segundos) ou ambos. Esta função de tabela definida pelo sistema permite a geração de linhas sintéticas.
Note que é possível gerar tabelas virtuais com 0 colunas mas possivelmente com muitas linhas. Tais tabelas virtuais são úteis para consultas cuja cláusula SELECT consiste inteiramente em funções geradoras de dados.
Sintaxe¶
GENERATOR( ROWCOUNT => <count> [ , TIMELIMIT => <sec> ] )
GENERATOR( [ TIMELIMIT => <sec> ] )
Notas de uso¶
- counte- secdevem ser constantes inteiras não negativas.
- Se apenas o argumento - ROWCOUNTfor especificado, a tabela resultante conterá- countlinhas.
- Se apenas o argumento - TIMELIMITfor especificado, a consulta é executada por- secsegundos, gerando o maior número possível de linhas dentro do período. A contagem exata das linhas depende da velocidade do sistema e não é inteiramente determinista.
- Se ambos os argumentos - ROWCOUNTe- TIMELIMITforem especificados, então:- Se - ROWCOUNTfor alcançado antes de- TIMELIMIT, a tabela resultante conterá- countlinhas.
- Se - TIMELIMITfor alcançado antes do- ROWCOUNT, a tabela conterá o número de linhas geradas dentro do período. A contagem exata das linhas depende da velocidade do sistema e não é inteiramente determinista.
 
- Se - ROWCOUNTou- TIMELIMITfor nulo, ele será ignorado. Então- generator(ROWCOUNT => null)gera 0 linhas.
- Se ambos os parâmetros ( - ROWCOUNTe- TIMELIMIT) forem omitidos, a função GENERATOR retorna 0 linhas.
- O conteúdo das linhas é determinado pelas funções da cláusula de projeção, não pela própria função GENERATOR. Para obter mais detalhes, consulte a seção Exemplos abaixo. Consulte também a(s) descrição(ões) das funções específicas (por exemplo SEQ()), que você planeja usar na cláusula de projeção; nem todas as funções válidas produzem sequências sem lacunas. 
Exemplos¶
Nota
Estes exemplos geram sequências que podem ter lacunas. Para exemplos que geram sequências sem lacunas, consulte SEQ1 / SEQ2 / SEQ4 / SEQ8 e ROW_NUMBER.
Este exemplo utiliza a função GENERATOR para gerar 10 linhas. O conteúdo das linhas é determinado pelas funções na cláusula de projeção:
- A coluna SEQ4() gera uma sequência de números inteiros de 4 bytes, começando com 0. 
- A coluna UNIFORM(…) gera valores na faixa entre o primeiro parâmetro (1) e o segundo parâmetro (10), com base em uma função ou em uma constante passada como terceiro parâmetro. 
Este exemplo inclui uma “semente” opcional para a função RANDOM() para que a saída seja consistente:
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 | +--------+----------------------------+
Este exemplo é semelhante ao exemplo anterior, exceto que ele passa uma constante e não uma função como terceiro parâmetro para a função UNIFORM. O resultado é que a saída para a coluna UNIFORM é a mesma para cada linha.
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 | +--------+--------------------+
Se você omitir os parâmetros ROWCOUNT e TIMELIMIT, a saída será de 0 linhas:
SELECT seq4(), uniform(1, 10, RANDOM(12)) FROM TABLE(GENERATOR()) v ORDER BY 1; +--------+----------------------------+ | SEQ4() | UNIFORM(1, 10, RANDOM(12)) | |--------+----------------------------| +--------+----------------------------+
O exemplo seguinte utiliza o parâmetro TIMELIMIT sem o parâmetro ROWCOUNT.
SELECT COUNT(seq4()) FROM TABLE(GENERATOR(TIMELIMIT => 10)) v;
+---------------+
| COUNT(SEQ4()) |
|---------------|
|    3615440896 |
+---------------+