Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Concatenar números na expressão de coluna virtual gera ORA-12899:valor muito grande para coluna


Seus números não são limitados. Com números de um dígito (positivo) você sei que o comprimento concatenado só pode ser três, mas a coluna virtual tem que ser grande o suficiente para qualquer número - então parece que está permitindo até 40 dígitos para o modelo de formato implícito (38 dígitos significativos, o separador decimal e o sinal; lexicalização de @collspar ).

Dito isto, restringir a coluna numérica não seria refletido no comprimento da coluna virtual - tornando ambas as colunas NUMBER(1,0) ainda deixa a concatenação exigindo 81 caracteres. Pegar a substring do valor gerado também não funcionará , neste caso obtendo ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) . Fornecendo um modelo de formato para cada to_char() chamada, por exemplo de FM999 ), funcionaria, mas restringe os valores de cada lado do sublinhado em vez do comprimento total diretamente.

Se você deseja restringir o tamanho da coluna, pode convertê-la para o mesmo tipo e tamanho de dados, o que é mais explícito:
text VARCHAR2(10) generated always as 
    (cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL