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


Answers:


282

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

Oracle 12.1和更低版本中,最大对象名称长度为30个字节。


6
它实际上基于可兼容参数中的版本。如果您具有兼容设置为11.2.0的12.2 DB,仍然将您限制为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 '17

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
Justin Cave

1

由于数据字典的最大名称大小为30个字符,因此只能存储30个字节


1

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



0

我正在研究Oracle 12c 12.1。但是,似乎它不允许列/表名使用超过30个字符。

通读一个涉及30个字节的oracle页面。 https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

在12c中,尽管all_tab_columns确实对Table_Name说VARCHAR2(128),但它不允许超过30个字节的名称。

找到了另一篇有关12c R2的文章,该文章似乎允许最多128个字符。 https://community.oracle.com/ideas/3338


2
SELECT名称,值FROM v $ parameter,WHERE名称=“兼容”;必须为12.2.0
rtaft

-4

表和列名称的最大长度为128个字节或128个字符。此限制适用于使用sybase数据库用户。我已彻底验证了此答案,所以我已经自信地发布了此答案。


3
这是一个oracle的问题。
Stefan Steinegger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.