212 votes

Quelle est la longueur maximale d'un nom de table dans Oracle ?

Quelle est la longueur maximale d'un nom de table et d'un nom de colonne dans Oracle ?

312voto

TStamper Points 17163

Sur Oracle 12.2 et plus, la longueur maximale des noms d'objets est de 128 octets.

Sur Oracle 12.1 et en dessous, la longueur maximale des noms d'objets est de 30 octets.

11 votes

Il est en fait basé sur la version dans le paramètre compatible. Si vous avez une base de données 12.2 avec le paramètre compatible réglé sur 11.2.0, vous êtes toujours limité à 30 caractères.

243voto

Apprendre à un homme à pêcher

Notez le type et la taille des données

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

5 votes

Avec le SQL standard, vous pouvez également déterminer les longueurs en interrogeant la table : select * from all_tab_columns where table_name = 'ALL_TAB_COLUMNS' ;

1 votes

Il est peut-être préférable de décrire la table de base tous_les_objets puisque cela montre que la limitation du nom s'applique à presque tout ce qui a une vue all_* basée dessus.

4 votes

Prenez cette réponse avec un grain de sel. Sur la version 12.1.0.2.0 describe user_mview_logs renvoie à LOG_TABLE VARCHAR2(128) mais si vous essayez d'utiliser un nom de journal de vue matérialisée de 30 caractères ou plus, vous obtiendrez des résultats assez déroutants.

19voto

DESCRIBE all_tab_columns

affichera un TABLE_NAME VARCHAR2(30)

Remarque : VARCHAR2(30) signifie une limitation à 30 octets, et non à 30 caractères, et peut donc être différent si votre base de données est configurée pour utiliser un jeu de caractères multi-octets.

Mike

8voto

Maarten Points 39

C'est vrai, mais tant que vous utilisez des caractères ASCII, même un jeu de caractères multi-octets donne toujours une limitation d'exactement 30 caractères... donc à moins que vous ne vouliez mettre des cœurs et des chats souriants dans vos noms de DB, tout va bien...

0 votes

Pour que les choses soient claires : il existe des jeux de caractères multi-octets qui nécessitent plus d'un octet par caractère ASCII, mais ils ne peuvent pas être utilisés comme jeu de caractères de base de données car ils sont soumis à une exigence stricte de "sur-ensemble ASCII". (en fait, il s'agit de l'ASCII ou de l'EBCDIC, selon la plate-forme).

5voto

Wild Pottok Points 41

Mise à jour : comme indiqué ci-dessus, dans Oracle 12.2 et les versions ultérieures, la longueur maximale des noms d'objets est désormais de 128 octets.

Le reste de cet article s'applique à Oracle 12.1 et aux versions inférieures : la limite était alors de 30 chars (octets, vraiment).

Mais ne me croyez pas sur parole ; essayez par vous-même (sur Oracle 12.1 ou inférieur) :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X