Oracle中表名的最大长度是多少?

218

在Oracle中,表名和列名的最大长度是多少?

12个回答

322

Oracle 12.2 及以上版本中,对象名称的最大长度为128个字节。

Oracle 12.1 及以下版本中,对象名称的最大长度为30个字节。


12
实际上,它基于兼容参数中的版本。如果你有一个兼容设置为11.2.0的12.2数据库,仍然限制你只能使用30个字符。 - rtaft

249

授人以鱼不如授人以渔

注意数据类型和大小

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

7
使用标准SQL,您还可以通过查询表来确定长度:select * from all_tab_columns where table_name = 'ALL_TAB_COLUMNS'; - JustinKSU
2
更好的做法可能是描述基表[all_objects](http://docs.oracle.com/database/122/REFRN/ALL_OBJECTS.htm#REFRN20146),因为它显示名称限制适用于几乎基于它的所有all_*视图。 - mormegil
5
请对这个答案持保留态度。在版本12.1.0.2.0中,运行describe user_mview_logs会返回LOG_TABLE VARCHAR2(128),但如果尝试使用30个或更多字符来命名物化视图日志,则会得到一些令人困惑的结果。 - Saul
4
如果您的兼容参数设置为旧版本,即使长度为128,您仍然可能会受到30个字符限制的影响。 - rtaft

20

描述 all_tab_columns

将显示一个 TABLE_NAME VARCHAR2(30)

注意,VARCHAR2(30) 表示 30 字节的限制,而不是 30 个字符的限制,因此如果您的数据库配置/设置使用多字节字符集,则可能会有所不同。

Mike


9

没错,但只要您使用ASCII字符,即使是多字节字符集,也仍然会受到30个字符的限制... 所以除非您想在数据库名称中放置心形和微笑猫,否则您很好...


只是为了明确:有一些多字节字符集需要超过一个字节来表示ASCII字符,但它们不能用作数据库字符集,因为对它们有一个严格的“ASCII超集”要求(实际上取决于平台的ASCII或EBCDIC)。 - eckes

7

更新:如上所述,从Oracle 12.2版本开始,对象名称最大长度现在为128字节。

本文其余部分适用于Oracle 12.1及以下版本:当时的限制为30个字符(实际上是30个字节)。

但不要只听我的话,请自行尝试(在Oracle 12.1或更低版本上进行):

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

4

3
在 Oracle 12.2 中,您可以使用内置常量 ORA_MAX_NAME_LEN,其设置为 128 字节(根据 12.2 版本)。在 Oracle 12.1 之前,最大大小为 30 字节。

2

由于数据字典只允许存储30个字节,因此名称的最大长度为30个字符。


2
在我处理的10g数据库中,我知道表名最多只能有30个字符。我不知道列名的长度是多少(但我知道它大于30个字符)。

2
列名也被限制为30个字符,不得超过30个字符。 - Justin Cave

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接