Por ejemplo, si queríamos correr el siguiente script:
CREATE TABLE t_EstadoComprobante
( ID_EstadoComprobante NUMBER(4) NOT NULL,
EstadoComprobante VARCHAR(50) NOT NULL
);
--
ALTER TABLE t_EstadoComprobante
ADD CONSTRAINT PK_EstadoComprobante
PRIMARY KEY (ID_EstadoComprobante);
--
CREATE TABLE t_Comprobante
( ID_Comprobante NUMBER(4) NOT NULL,
Numero_Comprobante NUMBER(8) NOT NULL,
Fecha_Comprobante DATE NOT NULL,
Monto_Comprobante NUMBER(12,2) NOT NULL,
ID_EstadoComprobante NUMBER(4) NOT NULL
);
--
ALTER TABLE t_Comprobante
ADD CONSTRAINT PK_Comprobante
PRIMARY KEY (ID_Comprobante);
--
ALTER TABLE t_Comprobante
ADD CONSTRAINT FK_Comprobante_EstadoComprobante
FOREIGN KEY (ID_EstadoComprobante)
REFERENCES t_EstadoComprobante (ID_EstadoComprobante);
--
Nos encontrábamos con el siguiente mensaje de error.
ORA-00972: identifier is too long
00972. 00000 - "identifier is too long"
*Cause: An identifier with more than 30 characters was specified.
*Action: Specify at most 30 characters.
La limitación de 30 caracteres obligaba a utilizar abreviaturas para nombrar a identificadores, haciendo poco legibles (y hasta inentendibles) ciertos nombres.
Identificadores Largos (hasta 128 bytes) en Oracle 12c R2
La nueva versión de Oracle soporta identificadores de hasta 128 bytes, por lo que de ejecutar el script anterior en una base de datos 12c R2, obtendremos el siguiente resultado:Table created.
Table altered.
Table created.
Table altered.
Table altered.
Si consultamos la estructura de las tablas del diccionario de datos, podemos ver que la mayoria de las columnas de las vistas del diccionario de datos que contienen identificadores ahora tienen un tamaño de 128 bytes:SQL> desc all_tables
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(128)
TABLE_NAME NOT NULL VARCHAR2(128)
TABLESPACE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(128)
...
...
Restricciones y Consideraciones
Los siguientes objetos mantienen sus identificadores con el largo como en versiones anteriores.
- 8 Bytes
- Nombre de Base de Datos
- 30 Bytes
- Tablespace
- Disk Group
- PDBs
- Rollback Segment
create table tablááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá
(
Son_67_Caracteres_pero_ocupan_130_bytes int
);
ORA-00972: identifier is too long
No hay comentarios.:
Publicar un comentario