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


Réponses:


283

Dans Oracle 12.2 et au-dessus, la longueur maximale du nom d'objet est de 128 octets.

Dans Oracle 12.1 et au-dessous, la longueur maximale du nom d'objet est de 30 octets.


6
Il est en fait basé sur la version dans le paramètre compatible. Si vous avez un DB 12.2 avec un jeu compatible sur 11.2.0, cela vous limite toujours à 30 caractères.
rtaft

220

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

4
Avec SQL standard, vous pouvez également déterminer les longueurs en interrogeant la table: sélectionnez * de all_tab_columns où table_name = 'ALL_TAB_COLUMNS';
JustinKSU

1
Il peut être préférable de décrire la table de base all_objects , car cela montre que la limitation de nom s'applique à presque tout ce qui a une vue all_ * basée sur celle-ci.
mormegil

1
Prenez cette réponse avec un grain de sel. Sur la version 12.1.0.2.0 describe user_mview_logsrendement LOG_TABLE VARCHAR2(128)mais si vous essayez quelque chose d' approchant 30 caractères ou plus pour un nom de journal de vue matérialisée, vous obtiendrez des résultats assez troublants.
Saul le

1
Malgré une longueur de 128, vous pouvez toujours rester bloqué avec la limite de 30 caractères si votre paramètre compatible est défini sur une version plus ancienne.
rtaft

19

DÉCRIRE all_tab_columns

affichera un TABLE_NAME VARCHAR2 (30)

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

Mike


8

Bien, mais tant que vous utilisez des caractères ASCII, même un jeu de caractères multi-octets donnerait toujours une limitation d'exactement 30 caractères ... donc à moins que vous ne vouliez mettre des cœurs et des chats souriants dans votre DB, vous nommez votre amende ...


Juste pour que cela soit clair: il existe des jeux de caractères multi-octets qui DOIVENT nécessiter 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 il y a une exigence stricte de "superset ASCII" pour eux. (en fait son ASCII ou EBCDIC selon la plate-forme).
eckes

5

30 char (octets, vraiment, comme cela a été dit).

Mais ne me faites pas confiance; essayez ceci par vous-même:

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

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



1

Dans la base de données 10g dont je traite, je sais que les noms de table ne dépassent pas 30 caractères. Impossible de vous dire quelle est la longueur du nom de la colonne (mais je sais qu'elle est> 30).


1
Les noms de colonnes sont également limités à 30 caractères, pas> 30
Justin Cave

1

La taille maximale du nom est de 30 caractères en raison du dictionnaire de données qui ne permet le stockage que pour 30 octets


1

Sur Oracle 12.2, vous pouvez utiliser la constante intégrée,, ORA_MAX_NAME_LENdéfinie sur 128 octets (selon 12.2) Avant que la Oracle 12.1taille maximale ne soit de 30 octets.



0

Je travaille sur Oracle 12c 12.1. Cependant, cela ne semble pas autoriser plus de 30 caractères pour les noms de colonne / table.

Lisez une page oracle qui mentionne 30 octets. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

En 12c, bien que les all_tab_columns disent VARCHAR2 (128) pour Table_Name, il n'autorise pas plus de 30 octets de nom.

J'ai trouvé un autre article sur 12c R2, qui semble autoriser jusqu'à 128 caractères. https://community.oracle.com/ideas/3338


2
SELECT nom, valeur FROM v $ paramètre WHERE nom = 'compatible'; Doit être 12.2.0
rtaft

-4

La longueur maximale du nom de la table et de la colonne est de 128 octets ou 128 caractères. Cette limite concerne l'utilisation des utilisateurs de la base de données sybase. J'ai vérifié cette réponse minutieusement, de sorte que j'ai posté cette réponse avec confiance.


3
c'est une question oracle.
Stefan Steinegger
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.