Qual è la lunghezza massima del nome di una tabella in Oracle?


Risposte:


283

In Oracle 12.2 e versioni successive la lunghezza massima del nome oggetto è 128 byte.

In Oracle 12.1 e precedenti la lunghezza massima del nome oggetto è di 30 byte.


6
In realtà si basa sulla versione nel parametro compatibile. Se si dispone di un DB 12.2 con compatibile impostato su 11.2.0, è comunque limitato a 30 caratteri.
partenza il

220

Insegna a un uomo a pescare

Notare il tipo e la dimensione dei dati

>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
Con SQL standard puoi anche determinare le lunghezze eseguendo una query sulla tabella: seleziona * da all_tab_columns dove table_name = 'ALL_TAB_COLUMNS';
JustinKSU,

1
Potrebbe essere meglio descrivere la tabella di base all_objects , poiché ciò mostra che la limitazione del nome si applica praticamente a tutto ciò che ha una vista all_ * basata su di essa.
mormegil,

1
Prendi questa risposta con un granello di sale. Sulla versione 12.1.0.2.0 describe user_mview_logsritorna LOG_TABLE VARCHAR2(128)ma se provi qualcosa che si avvicina a 30 caratteri o più per un nome di registro della vista materializzato, otterrai alcuni risultati abbastanza sconcertanti.
Saul,

1
Nonostante abbia una lunghezza di 128, puoi comunque rimanere bloccato con il limite di 30 caratteri se il tuo parametro compatibile è impostato su una versione precedente.
partenza il

19

DESCRIVERE all_tab_columns

mostrerà un TABLE_NAME VARCHAR2 (30)

Nota VARCHAR2 (30) indica una limitazione di 30 byte, non una limitazione di 30 caratteri e pertanto potrebbe essere diversa se il database è configurato / impostato per utilizzare un set di caratteri multibyte.

Mike


8

Giusto, ma fintanto che usi caratteri ASCII anche un set di caratteri multibyte darebbe comunque una limitazione di esattamente 30 caratteri ... quindi, a meno che tu non voglia mettere cuori e gatti sorridenti nei tuoi nomi di DB, va bene ...


Giusto per chiarire: esistono set di caratteri multi-byte che richiedono più di un byte per carattere ASCII, ma non possono essere utilizzati come set di caratteri del database in quanto vi è un rigoroso requisito "superset ASCII" per loro. (in realtà è ASCII o EBCDIC a seconda della piattaforma).
Devo dire

5

30 caratteri (byte, davvero, come è stato affermato).

Ma non fidarti di me; prova questo per te:

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

Aggiornato: come indicato sopra, in Oracle 12.2 e versioni successive, la lunghezza massima del nome oggetto è ora di 128 byte.



1

Nel database 10g con cui ho a che fare, so che i nomi delle tabelle hanno un massimo di 30 caratteri. Non saprei dirti qual è la lunghezza del nome della colonna (ma so che è> 30).


1
Anche i nomi delle colonne sono limitati a 30 caratteri, non> 30
Justin Cave,

1

La dimensione massima del nome è di 30 caratteri a causa del dizionario dei dati che consente l'archiviazione solo per 30 byte


1

Oracle 12.2, è possibile utilizzare la costante incorporata ORA_MAX_NAME_LEN, impostata su 128 byte (come da 12.2) Prima che la Oracle 12.1dimensione massima fosse di 30 byte.



0

Sto lavorando su Oracle 12c 12.1. Tuttavia, non sembra che consenta più di 30 caratteri per i nomi di colonne / tabelle.

Leggi una pagina di Oracle che menziona 30 byte. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

Nel 12c sebbene tutte le colonne_colori_dici dicano VARCHAR2 (128) per Table_Name, non consente più di 30 byte di nome.

Ho trovato un altro articolo su 12c R2, che sembra consentire fino a 128 caratteri. https://community.oracle.com/ideas/3338


2
SELEZIONA nome, valore DA v $ parametro WHERE nome = 'compatibile'; Deve essere il 12.2.0
dopo il

-4

La lunghezza massima del nome della tabella e della colonna è di 128 byte o 128 caratteri. Questo limite è per l'utilizzo degli utenti del database sybase. Ho verificato a fondo questa risposta, quindi ho pubblicato questa risposta con sicurezza.


3
è una domanda oracolo.
Stefan Steinegger,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.