Какова максимальная длина имени таблицы в Oracle?

193

Какова максимальная длина имени таблицы и имени столбца в Oracle?

robertkroll
источник

Ответы:

283

В Oracle 12.2 и выше максимальная длина имени объекта составляет 128 байтов.

В Oracle 12.1 и ниже максимальная длина имени объекта составляет 30 байтов.

TStamper
источник
6
На самом деле это зависит от версии в совместимом параметре. Если у вас есть 12.2 БД с совместимым набором 11.2.0, по-прежнему ограничивает вас до 30 символов.
rtaft
220

Научить человека ловить рыбу

Обратите внимание на тип данных и размер

>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
В стандартном SQL вы также можете определить длину, выполнив запрос к таблице: выберите * из all_tab_columns, где table_name = 'ALL_TAB_COLUMNS';
JustinKSU
1
Может быть, лучше описать базовую таблицу all_objects , поскольку это показывает, что ограничение имени относится практически ко всему, у кого основано представление all_ *.
mormegil
1
Примите этот ответ с крошкой соли. В версии 12.1.0.2.0 describe user_mview_logsвозвращается, LOG_TABLE VARCHAR2(128)но если вы попробуете что-нибудь, приближающееся к 30 или более символам, для материализованного имени журнала представления, вы получите довольно удивительные результаты.
Сол
1
Несмотря на длину 128, вы все равно можете застрять с пределом 30 символов, если ваш совместимый параметр установлен на более старую версию.
rtaft
19

ОПИСАТЬ all_tab_columns

покажет TABLE_NAME VARCHAR2 (30)

Примечание VARCHAR2 (30) означает ограничение в 30 байтов, а не ограничение в 30 символов, и, следовательно, может отличаться, если ваша база данных настроена / настроена на использование многобайтового набора символов.

Майк


источник
8

Правильно, но до тех пор, пока вы используете символы ASCII, даже многобайтовый набор символов будет по-прежнему давать ограничение в 30 символов ... поэтому, если вы не хотите помещать сердца и улыбающихся кошек в свои имена БД, вы прекрасно ...

Маартен
источник
Просто чтобы прояснить это: существуют многобайтовые наборы символов, которые ДОЛЖНЫ требовать более одного байта на символ ASCII, но их нельзя использовать в качестве набора символов базы данных, поскольку для них существует строгое требование «расширенного набора ASCII». (на самом деле это ASCII или EBCDIC в зависимости от платформы).
Eckes
5

30 символов (на самом деле, как уже было сказано).

Но не верь мне; попробуйте это для себя:

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

Обновлено: как указано выше, в Oracle 12.2 и более поздних версиях максимальная длина имени объекта теперь составляет 128 байтов.

Дикий Потток
источник
1

Я знаю, что в базе данных 10g имена таблиц не превышают 30 символов. Не могу сказать, какова длина имени столбца (но я знаю, что это> 30).

Харпер Шелби
источник
1
Имена столбцов также ограничены 30 символами, но не> 30
Джастин Кейв,
1

Максимальный размер имени составляет 30 символов из-за словаря данных, который позволяет хранить только 30 байтов

Annu
источник
1

Вкл Oracle 12.2, вы можете использовать встроенную константу, ORA_MAX_NAME_LENустановленную на 128 байтов (согласно 12.2). До того, как Oracle 12.1максимальный размер был 30 байтов.

fg78nc
источник
0

Я работаю на Oracle 12c 12.1. Однако не похоже, чтобы в именах столбцов / таблиц было больше 30 символов.

Прочитайте страницу оракула, которая упоминает 30 байтов. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

В 12c, хотя all_tab_columns действительно говорят VARCHAR2 (128) для Table_Name, оно не допускает имени более 30 байтов.

Нашел еще одну статью о 12c R2, которая, кажется, разрешает до 128 символов. https://community.oracle.com/ideas/3338

Vaibhav
источник
2
SELECT name, значение FROM v $ параметр WHERE name = 'совместимый'; Должен быть 12.2.0
18.15
-4

Максимальная длина имени таблицы и столбца составляет 128 байтов или 128 символов. Это ограничение для пользователей базы данных Sybase. Я тщательно проверил этот ответ, так что я опубликовал этот ответ с уверенностью.

Gowtham Smv
источник
3
это вопрос оракула.
Стефан Штайнеггер,