¿Cuál es la longitud máxima de un nombre de tabla en Oracle?

192

¿Cuál es la longitud máxima de un nombre de tabla y columna en Oracle?

robertkroll
fuente

Respuestas:

282

En Oracle 12.2 y superior, la longitud máxima del nombre del objeto es de 128 bytes.

En Oracle 12.1 y versiones inferiores, la longitud máxima del nombre del objeto es de 30 bytes.

TStamper
fuente
66
En realidad, se basa en la versión en el parámetro compatible. Si tiene una base de datos 12.2 con un conjunto compatible con 11.2.0, todavía está limitado a 30 caracteres.
rtaft
220

Enseñar a un hombre a pescar

Observe el tipo de datos y el tamaño

>describe all_tab_columns

VIEW all_tab_columns

Name                                      Null?    Type                        
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)                
 TABLE_NAME                                NOT NULL VARCHAR2(30)                
 COLUMN_NAME                               NOT NULL VARCHAR2(30)                
 DATA_TYPE                                          VARCHAR2(106)               
 DATA_TYPE_MOD                                      VARCHAR2(3)                 
 DATA_TYPE_OWNER                                    VARCHAR2(30)                
 DATA_LENGTH                               NOT NULL NUMBER                      
 DATA_PRECISION                                     NUMBER                      
 DATA_SCALE                                         NUMBER                      
 NULLABLE                                           VARCHAR2(1)                 
 COLUMN_ID                                          NUMBER                      
 DEFAULT_LENGTH                                     NUMBER                      
 DATA_DEFAULT                                       LONG                        
 NUM_DISTINCT                                       NUMBER                      
 LOW_VALUE                                          RAW(32)                     
 HIGH_VALUE                                         RAW(32)                     
 DENSITY                                            NUMBER                      
 NUM_NULLS                                          NUMBER                      
 NUM_BUCKETS                                        NUMBER                      
 LAST_ANALYZED                                      DATE                        
 SAMPLE_SIZE                                        NUMBER                      
 CHARACTER_SET_NAME                                 VARCHAR2(44)                
 CHAR_COL_DECL_LENGTH                               NUMBER                      
 GLOBAL_STATS                                       VARCHAR2(3)                 
 USER_STATS                                         VARCHAR2(3)                 
 AVG_COL_LEN                                        NUMBER                      
 CHAR_LENGTH                                        NUMBER                      
 CHAR_USED                                          VARCHAR2(1)                 
 V80_FMT_IMAGE                                      VARCHAR2(3)                 
 DATA_UPGRADED                                      VARCHAR2(3)                 
 HISTOGRAM                                          VARCHAR2(15)                

fuente
44
Con el SQL estándar también puede determinar las longitudes consultando la tabla: seleccione * de all_tab_columns donde table_name = 'ALL_TAB_COLUMNS';
JustinKSU
1
Puede ser mejor describir la tabla base all_objects , ya que muestra que la limitación de nombre se aplica a casi todo lo que tiene una vista all_ * basada en ella.
mormegil
1
Toma esta respuesta con un grano de sal. En la versión 12.1.0.2.0 describe user_mview_logsregresa, LOG_TABLE VARCHAR2(128)pero si intenta algo que se aproxime a 30 caracteres o más para un nombre de registro de vista materializado, obtendrá resultados bastante desconcertantes.
Saul
1
A pesar de tener 128 de longitud, aún puede quedarse atascado con el límite de 30 caracteres si su parámetro compatible está configurado en una versión anterior.
rtaft
19

DESCRIBA all_tab_columns

mostrará un TABLE_NAME VARCHAR2 (30)

Nota VARCHAR2 (30) significa una limitación de 30 bytes, no una limitación de 30 caracteres, y por lo tanto puede ser diferente si su base de datos está configurada / configurada para usar un juego de caracteres multibyte.

Miguel


fuente
8

Correcto, pero siempre que use caracteres ASCII, incluso un conjunto de caracteres multibyte aún le daría una limitación de exactamente 30 caracteres ... así que, a menos que quiera poner corazones y gatos sonrientes en sus nombres DB, está bien ...

Maarten
fuente
Solo para aclararlo: hay conjuntos de caracteres de varios bytes que requieren más de un byte por carácter ASCII, pero no se pueden usar como conjunto de caracteres de la base de datos, ya que existe un requisito estricto de "superconjunto ASCII" para ellos. (en realidad es ASCII o EBCDIC dependiendo de la plataforma).
eckes el
5

30 caracteres (bytes, realmente, como se ha dicho).

Pero no confíes en mí; prueba esto por ti mismo:

SQL> create table I23456789012345678901234567890 (my_id number);

Table created.



SQL> create table I234567890123456789012345678901(my_id number);


ERROR at line 1:

ORA-00972: identifier is too long

Actualizado: como se indicó anteriormente, en Oracle 12.2 y versiones posteriores, la longitud máxima del nombre del objeto es ahora de 128 bytes.

Pottok salvaje
fuente
1

En la base de datos de 10g con la que estoy tratando, sé que los nombres de las tablas tienen un máximo de 30 caracteres. No podría decirte cuál es la longitud del nombre de la columna (pero sé que es> 30).

Harper Shelby
fuente
1
Los nombres de columna también están limitados a 30 caracteres, no> 30
Justin Cave
1

El tamaño máximo del nombre es de 30 caracteres debido al diccionario de datos que permite el almacenamiento solo para 30 bytes.

Annu
fuente
1

Encendido Oracle 12.2, puede usar la constante incorporada ORA_MAX_NAME_LEN, establecida en 128 bytes (según 12.2) Antes de que el Oracle 12.1tamaño máximo fuera de 30 bytes.

fg78nc
fuente
0

Estoy trabajando en Oracle 12c 12.1. Sin embargo, no parece que permita más de 30 caracteres para los nombres de columna / tabla.

Lea una página de Oracle que menciona 30 bytes. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

En 12c, aunque las columnas all_tab_columns dicen VARCHAR2 (128) para Table_Name, no permite un nombre de más de 30 bytes.

Encontré otro artículo sobre 12c R2, que parece estar permitiendo esto hasta 128 caracteres. https://community.oracle.com/ideas/3338

Vaibhav
fuente
2
SELECCIONE nombre, valor DESDE v $ parámetro WHERE nombre = 'compatible'; Debe ser 12.2.0
rtaft
-4

La longitud máxima de la tabla y el nombre de la columna es de 128 bytes o 128 caracteres. Este límite es para usar usuarios de la base de datos sybase. Verifiqué esta respuesta a fondo, por lo que he publicado esta respuesta con confianza.

Gowtham Smv
fuente
3
Es una pregunta de oráculo.
Stefan Steinegger