sql >> Base de Datos >  >> RDS >> Oracle

La concatenación de números en la expresión de columna virtual arroja ORA-12899:valor demasiado grande para la columna

Sus números no están restringidos. Con números de un solo dígito (positivos) usted sepa que la longitud concatenada solo puede ser tres, pero la columna virtual debe ser lo suficientemente grande para cualquier número, por lo que parece que permite hasta 40 dígitos para el modelo de formato implícito (38 dígitos significativos, el separador decimal y el signo; La lexicalización de @collspar ).

Habiendo dicho eso, restringir la columna de números no se reflejaría en la longitud de la columna virtual, haciendo que ambas columnas NUMBER(1,0) todavía deja la concatenación que requiere 81 caracteres. Tomar la subcadena del valor generado tampoco funcionará , en este caso obteniendo ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) . Proporcionar un modelo de formato para cada to_char() llamar, por ej. de FM999 ), funcionaría pero restringe los valores a ambos lados del guión bajo en lugar de la longitud total directamente.

Si desea restringir el tamaño de la columna, puede convertirlo al mismo tipo y tamaño de datos, que es más explícito:

text VARCHAR2(10) generated always as 
    (cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL