Qual é o tamanho máximo de um nome de tabela no Oracle?


Respostas:


282

No Oracle 12.2 e acima, o comprimento máximo do nome do objeto é 128 bytes.

No Oracle 12.1 e abaixo, o comprimento máximo do nome do objeto é 30 bytes.


6
Na verdade, é baseado na versão no parâmetro compatível. Se você tiver um banco de dados 12,2 com o conjunto compatível como 11.2.0, ainda assim o limitará a 30 caracteres.
rtaft

220

Ensine um homem a pescar

Observe o tipo e tamanho dos dados

>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)                

4
Com o SQL padrão, você também pode determinar os comprimentos consultando a tabela: selecione * em all_tab_columns em que table_name = 'ALL_TAB_COLUMNS';
JustinKSU

1
Talvez seja melhor descrever a tabela base all_objects , já que isso mostra que a limitação de nomes se aplica a praticamente tudo que possui uma visão all_ * baseada nela.
Mormegil 22/05/19

1
Tome esta resposta com um grão de sal. Na versão 12.1.0.2.0 describe user_mview_logsretorna, LOG_TABLE VARCHAR2(128)mas se você tentar algo próximo a 30 caracteres ou mais para um nome de log de exibição materializado, obterá resultados bastante intrigantes.
Saul

1
Apesar de ter 128 comprimento, você ainda pode ficar preso ao limite de 30 caracteres se o seu parâmetro compatível estiver definido para uma versão mais antiga.
rtaft

19

DESCRIBE all_tab_columns

mostrará um TABLE_NAME VARCHAR2 (30)

Nota VARCHAR2 (30) significa uma limitação de 30 bytes, não uma limitação de 30 caracteres e, portanto, pode ser diferente se o seu banco de dados estiver configurado / configurado para usar um conjunto de caracteres multibyte.

Mike


8

Certo, mas desde que você use caracteres ASCII, mesmo um conjunto de caracteres multibyte ainda daria uma limitação de exatamente 30 caracteres ... então, a menos que você queira colocar corações e gatos sorridentes nos nomes de banco de dados, tudo bem ...


Só para esclarecer: existem conjuntos de caracteres de vários bytes que DEFENDEM mais de um byte por caractere ASCII, mas eles não podem ser usados ​​como conjunto de caracteres de banco de dados, pois existe um requisito estrito de "superconjunto ASCII" para eles. (na verdade, é ASCII ou EBCDIC, dependendo da plataforma).
Eckes

5

30 caracteres (bytes, na verdade, como foi afirmado).

Mas não confie em mim; tente você mesmo:

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

Atualizado: conforme indicado acima, no Oracle 12.2 e posterior, o comprimento máximo do nome do objeto agora é de 128 bytes.



1

No banco de dados 10g com o qual estou lidando, sei que os nomes das tabelas têm um máximo de 30 caracteres. Não foi possível informar qual é o tamanho do nome da coluna (mas sei que é> 30).


1
Os nomes das colunas estão limitados a 30 caracteres, bem como, não> 30
Justin Caverna

1

O tamanho máximo do nome é de 30 caracteres devido ao dicionário de dados que permite o armazenamento apenas de 30 bytes


1

Em Oracle 12.2, você pode usar a constante interna, ORA_MAX_NAME_LENdefinida como 128 bytes (conforme 12.2). Antes do Oracle 12.1tamanho máximo ser de 30 bytes.



0

Estou trabalhando no Oracle 12c 12.1. No entanto, não parece que ele permita mais de 30 caracteres para nomes de colunas / tabelas.

Leia uma página da Oracle que menciona 30 bytes. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

No 12c, embora as all_tab_columns digam VARCHAR2 (128) para Table_Name, ele não permite nomes com mais de 30 bytes.

Encontrei outro artigo sobre o 12c R2, que parece permitir isso com até 128 caracteres. https://community.oracle.com/ideas/3338


2
SELECT nome, valor FROM v $ parâmetro WHERE nome = 'compatível'; Deve ser 12.2.0
rtaft

-4

O comprimento máximo do nome da tabela e da coluna é de 128 bytes ou 128 caracteres. Esse limite é para usar usuários do banco de dados sybase. Eu verifiquei esta resposta completamente, para que eu tenha postado esta resposta com confiança.


3
é uma pergunta do oráculo.
Stefan Steinegger
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.