El identificador ORA-00972 es un nombre de columna de alias demasiado largo


81

tengo una consulta como:

SELECT column as averyveryveryverylongalias (more than 30 characters)
   FROM Table_name

devuelve el error . El identificador ORA-00972 es demasiado largo , ¿hay algún consejo para que funcione sin acortar el alias?

Gracias

Respuestas:


104

No, antes de la versión 12.2 de Oracle, no se permite que los identificadores excedan los 30 caracteres de longitud. Consulte la Referencia del lenguaje SQL de Oracle .

Sin embargo, a partir de la versión 12.2 pueden tener hasta 128 bytes de longitud. (Nota: bytes, no caracteres).


23
por curiosidad, ¿alguien sabe de dónde viene esta limitación y cómo es que nunca se ha relajado el límite? Realmente me sorprende que ninguno de los clientes de Oracle que pagan un millón de dólares haya solicitado tal característica (ahora no me malinterpreten, estoy bastante seguro de que hay alguna razón técnica profunda, pero aún así ...)
phtrivier

10
Bien, podría haber preguntado SO: stackoverflow.com/questions/1378133/…
phtrivier

También encontré esta situación. Tengo una columna de tabla con longitud de nombre = 32. Pero, ¿por qué diablos se permite que el nombre de una columna de una tabla tenga más de 30 caracteres, mientras que al mismo tiempo un identificador no? Estos límites deberían ir de la mano, ¿verdad? ¿Cómo puede surgir esta situación?
Vering

@Vering ¿Tiene más de 30 caracteres o más de 30 bytes? Hay un error extraño en el que un identificador puede tener un poco más de 30 bytes si el último carácter es de varios bytes.
Jon Heller

@JonHeller: Estoy bastante seguro de que tenía
30/32

12

El error también es causado por un manejo peculiar de comillas y qutoes individuales. Para incluir comillas simples dentro de la consulta, utilice comillas simples dobles .

Esto no funcionará

select dbms_xmlgen.getxml("Select ....") XML from dual;

o esto ya sea

select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;

pero esto funciona

select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;

El marcado cambió mi ejemplo, debería ser algo igual a comillas simples comillas simples comillas simples rojas comillas simples comillas simples
mike cummings

5

El objeto donde Oracle almacena el nombre de los identificadores (por ejemplo, los nombres de la tabla del usuario se almacenan en la tabla denominada USER_TABLES y los nombres de las columnas del usuario se almacenan en la tabla denominada USER_TAB_COLUMNS), tiene las columnas NAME (por ejemplo, TABLE_NAME en USER_TABLES) de tamaño Varchar2 (30) ... y es uniforme en todas las tablas del sistema de objetos o identificadores -

 DBA_ALL_TABLES         ALL_ALL_TABLES        USER_ALL_TABLES
 DBA_PARTIAL_DROP_TABS  ALL_PARTIAL_DROP_TABS USER_PARTIAL_DROP_TABS
 DBA_PART_TABLES        ALL_PART_TABLES       USER_PART_TABLES 
 DBA_TABLES             ALL_TABLES            USER_TABLES           
 DBA_TABLESPACES        USER_TABLESPACES      TAB
 DBA_TAB_COLUMNS      ALL_TAB_COLUMNS         USER_TAB_COLUMNS 
 DBA_TAB_COLS         ALL_TAB_COLS            USER_TAB_COLS 
 DBA_TAB_COMMENTS     ALL_TAB_COMMENTS        USER_TAB_COMMENTS 
 DBA_TAB_HISTOGRAMS   ALL_TAB_HISTOGRAMS      USER_TAB_HISTOGRAMS 
 DBA_TAB_MODIFICATIONS  ALL_TAB_MODIFICATIONS USER_TAB_MODIFICATIONS 
 DBA_TAB_PARTITIONS   ALL_TAB_PARTITIONS      USER_TAB_PARTITIONS

5

Estoy usando el sistema de informes Argos como interfaz y Oracle en la parte posterior. Acabo de encontrar este error y fue causado por una cadena con una comilla doble al principio y una comilla simple al final. Reemplazar la comilla doble con una sola resolvió el problema.


0

Si recientemente actualizó springboot a 1.4.3, es posible que deba realizar cambios en el archivo yml:

yml en 1.3:

jpa: 
  hibernate: 
    namingStrategy: org.hibernate.cfg.EJB3NamingStrategy

yml en 1.4.3:

jpa: 
  hibernate: 
    naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

-2

Como otros han mencionado, los nombres en Oracle SQL deben tener 30 caracteres o menos. Agregaría que esta regla se aplica no solo a los nombres de las tablas, sino también a los nombres de los campos. Así que ahí lo tienes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.