No T-SQL, posso executar o seguinte:
SELECT *
FROM (SELECT 1 AS n UNION ALL SELECT 2 AS n) AS t;
No IBM DB2 SQL, isso falha com:
[IBM][System i Access ODBC Driver][DB2 para i5/OS]SQL0199 - Palavra-chave UNION não esperada. Tokens válidos: , FROM INTO.
Uma SELECT
declaração parece exigir uma FROM
cláusula. De fato, uma instrução SQL redutiva, como:
SELECT 1 AS n
Também erros com:
[IBM][System i Access ODBC Driver][DB2 para i5/OS]SQL0104 - O token não era válido. Tokens válidos: , FROM INTO.
Existe uma função UNNEST que pode criar linhas de um array, mas parece que o array já deve ser representado por algo como uma variável ou parâmetro.
Eu entendo que poderia contornar isso fazendo a SELECT
partir de uma tabela arbitrária com um critério impossível como 1 = 0, mas isso parece ser um requisito bobo.
Então, como posso construir linhas sem uma tabela subjacente?
(palavras-chave: tabela de contagem; tabela derivada)
Plataforma e versão são importantes quando se pergunta sobre Db2...
Nesse caso, parece que você está executando o Db2 for IBM i (iSeries, AS/400)
O que você está procurando é conhecido nos padrões SQL como construtor de valor de tabela que se parece com
VALUES (<row1>),(<row2>),(...)
No Db2 for i (e LUW, acredito), as seguintes são algumas maneiras ...
No entanto, você parece estar usando uma versão mais antiga do Db2 para i (v5?) Não me lembro se essa versão suporta construtores de valor de tabela ...
O DB2 para i5 V5R4 não suporta a
VALUES
instrução como referência de tabela, portanto, os exemplos fornecidos em outra resposta não funcionarão nessa versão. No entanto, todas as versões do DB2 oferecem uma pseudo-tabela de linha únicaSYSIBM.SYSDUMMY1
, que pode ser usada para gerar linhas: