Was ist die maximale Länge eines Tabellennamens in Oracle?

192

Was ist die maximale Länge eines Tabellennamens und eines Spaltennamens in Oracle?

robertkroll
quelle

Antworten:

282

In Oracle 12.2 und höher beträgt die maximale Länge des Objektnamens 128 Byte.

In Oracle 12.1 und darunter beträgt die maximale Objektnamenlänge 30 Byte.

TStamper
quelle
6
Es basiert tatsächlich auf der Version im kompatiblen Parameter. Wenn Sie eine 12.2-Datenbank mit kompatiblem Wert auf 11.2.0 haben, sind Sie dennoch auf 30 Zeichen beschränkt.
Rtaft
220

Bringe einem Mann das Fischen bei

Beachten Sie den Datentyp und die Größe

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

quelle
4
Mit Standard-SQL können Sie die Längen auch durch Abfragen der Tabelle bestimmen: Wählen Sie * aus all_tab_columns aus, wobei table_name = 'ALL_TAB_COLUMNS';
JustinKSU
1
Es ist möglicherweise besser, die Basistabelle all_objects zu beschreiben , da dies zeigt, dass die Namensbeschränkung für so ziemlich alles gilt, auf dem eine all_ * -Ansicht basiert.
Mormegil
1
Nehmen Sie diese Antwort mit einem Körnchen Salz. In Version 12.1.0.2.0 wird describe user_mview_logszurückgegeben, LOG_TABLE VARCHAR2(128)aber wenn Sie etwas versuchen, das sich 30 Zeichen oder mehr für einen materialisierten Ansichtsprotokollnamen nähert, erhalten Sie einige ziemlich rätselhafte Ergebnisse.
Saul
1
Trotz einer Länge von 128 können Sie die 30-Zeichen-Grenze nicht einhalten, wenn Ihr kompatibler Parameter auf eine ältere Version eingestellt ist.
Rtaft
19

BESCHREIBEN Sie all_tab_columns

zeigt einen TABLE_NAME VARCHAR2 (30)

Hinweis VARCHAR2 (30) bedeutet eine 30-Byte-Beschränkung, keine 30-Zeichen-Beschränkung, und kann daher unterschiedlich sein, wenn Ihre Datenbank für die Verwendung eines Multibyte-Zeichensatzes konfiguriert / eingerichtet ist.

Mike


quelle
8

Richtig, aber solange Sie ASCII-Zeichen verwenden, würde selbst ein Multibyte-Zeichensatz eine Beschränkung von genau 30 Zeichen ergeben. Wenn Sie also keine Herzen und lächelnde Katzen in Ihre DB-Namen einfügen möchten, ist Ihre Geldstrafe ...

Maarten
quelle
Um dies klar zu machen: Es gibt Multi-Byte-Zeichensätze, für die zwar mehr als ein Byte pro ASCII-Zeichen erforderlich ist, die jedoch nicht als Datenbankzeichensatz verwendet werden können, da für sie eine strikte "ASCII-Obermenge" erforderlich ist. (tatsächlich ist es ASCII oder EBCDIC je nach Plattform).
eckes
5

30 Zeichen (Bytes, wie bereits erwähnt).

Aber vertraue mir nicht; Probieren Sie es selbst aus:

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

Aktualisiert: Wie oben angegeben, beträgt die maximale Länge des Objektnamens in Oracle 12.2 und höher jetzt 128 Byte.

Wilder Pottok
quelle
1

In der 10g-Datenbank, mit der ich mich befasse, weiß ich, dass Tabellennamen maximal 30 Zeichen lang sind. Konnte Ihnen nicht sagen, wie lang der Spaltenname ist (aber ich weiß, dass er> 30 ist).

Harper Shelby
quelle
1
Spaltennamen sind ebenfalls auf 30 Zeichen begrenzt, nicht> 30
Justin Cave
1

Die maximale Namensgröße beträgt 30 Zeichen, da das Datenwörterbuch nur 30 Byte speichern kann

Annu
quelle
1

Ein Oracle 12.2, Sie können die integrierte Konstante verwenden, ORA_MAX_NAME_LENdie auf 128 Byte (gemäß 12.2) festgelegt ist. Vor der Oracle 12.1maximalen Größe waren es 30 Byte.

fg78nc
quelle
0

Ich arbeite an Oracle 12c 12.1. Es scheint jedoch nicht mehr als 30 Zeichen für Spalten- / Tabellennamen zuzulassen.

Lesen Sie eine Orakelseite durch, auf der 30 Bytes erwähnt werden. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

In 12c wird in den all_tab_columns zwar VARCHAR2 (128) für Table_Name angegeben, es werden jedoch nicht mehr als 30 Byte Name zugelassen.

Es wurde ein weiterer Artikel über 12c R2 gefunden, der anscheinend bis zu 128 Zeichen zulässt. https://community.oracle.com/ideas/3338

Vaibhav
quelle
2
SELECT Name, Wert FROM v $ Parameter WHERE Name = 'kompatibel'; Muss 12.2.0 sein
15.
-4

Die maximale Länge des Tabellen- und Spaltennamens beträgt 128 Byte oder 128 Zeichen. Diese Grenze gilt für die Verwendung von Benutzern der Sybase-Datenbank. Ich habe diese Antwort gründlich überprüft, so dass ich diese Antwort sicher gepostet habe.

Gowtham Smv
quelle
3
Es ist eine Orakelfrage.
Stefan Steinegger