- 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¶
Notas de uso¶
countesecdevem 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 porsecsegundos, 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
ROWCOUNTeTIMELIMITforem especificados, então:Se
ROWCOUNTfor alcançado antes deTIMELIMIT, a tabela resultante conterácountlinhas.Se
TIMELIMITfor alcançado antes doROWCOUNT, 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
ROWCOUNTouTIMELIMITfor nulo, ele será ignorado. Entãogenerator(ROWCOUNT => null)gera 0 linhas.Se ambos os parâmetros (
ROWCOUNTeTIMELIMIT) 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:
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.
Se você omitir os parâmetros ROWCOUNT e TIMELIMIT, a saída será de 0 linhas:
O exemplo seguinte utiliza o parâmetro TIMELIMIT sem o parâmetro ROWCOUNT.