Estou tentando adicionar uma coluna gerada a uma tabela na V7R3 do IBM DB2:
ALTER TABLE MYLIB.MYTABLE
ADD COLUMN NEW_COL VARCHAR(255) GENERATED ALWAYS AS (
COALESCE(
CASE
WHEN ENV = 'A' THEN (SELECT GUIDE_URL FROM MYLIBA.PROGRAM WHERE CODE = PGM)
WHEN ENV = 'B' THEN (SELECT GUIDE_URL FROM MYLIBB.PROGRAM WHERE CODE = PGM)
ELSE (SELECT GUIDE_URL FROM MYLIBC.PROGRAM WHERE CODE = PGM)
END
, URL
)
)
Mas está dando o seguinte erro:
Estado SQL: 42601 Código do fornecedor: -199 Mensagem: [SQL0199] Palavra-chave WHEN não esperada. Tokens válidos: . ACCTNG USERID APPLNAME PROGRAMID WRKSTNNAME. Causa . . . . . : A palavra-chave WHEN não era esperada aqui. Um erro de sintaxe foi detectado na palavra-chave WHEN. A lista parcial de tokens válidos é . ACCTNG USERID APPLNAME PROGRAMID WRKSTNNAME. Esta lista pressupõe que a afirmação está correta até a palavra-chave inesperada. O erro pode estar no início da instrução, mas a sintaxe da instrução parece ser válida até este ponto. Recuperação . . . : examine a instrução SQL na área da palavra-chave especificada. Um dois-pontos ou um delimitador SQL podem estar faltando. SQL exige que palavras reservadas sejam delimitadas quando usadas como nome. Corrija a instrução SQL e tente a solicitação novamente.
Estou fazendo algo errado? Ou é simplesmente impossível criar tal coluna gerada no 7.3? Atualizar para 7.5 ajudaria? Tentei encontrar detalhes sobre quais colunas geradas podem ser criadas em quais versões, mas não consegui encontrar nada nos documentos.
A expressão de geração só pode fazer referência a registros especiais ou variáveis globais integradas, conforme indicado na documentação (procure por "cláusula de expressão gerada"); nenhuma chamada de função ou expressão complexa parece ser permitida.
Isso também não parece mudar no 7.5.
Acho que você terá que preencher esta coluna por meio de um gatilho.