ChatGPT解决这个技术问题 Extra ChatGPT

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

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


D
Dave Jarvis

Oracle 12.2 及以上,最大对象名称长度为 128 字节。

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


它实际上是基于 compatible 参数中的版本。如果您有一个兼容设置为 11.2.0 的 12.2 DB,则仍将您限制为 30 个字符。
佚名

教人钓鱼

注意数据类型和大小

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

使用标准 SQL,您还可以通过查询表来确定长度: select * from all_tab_columns where table_name = 'ALL_TAB_COLUMNS';
描述基表 all_objects 可能更好,因为这表明名称限制适用于几乎所有具有基于它的 all_* 视图的东西。
对这个答案持保留态度。在 12.1.0.2.0 版本中,describe user_mview_logs 返回 LOG_TABLE VARCHAR2(128),但如果您尝试使用接近 30 个字符或更多字符的具体化视图日志名称,您会得到一些非常令人费解的结果。
尽管长度为 128,但如果您的兼容参数设置为旧版本,您仍然可能会遇到 30 个字符的限制。
佚名

描述 all_tab_columns

将显示 TABLE_NAME VARCHAR2(30)

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

麦克风


K
Kyle

是的,但只要你使用 ASCII 字符,即使是多字节字符集仍然会限制正好 30 个字符......所以除非你想把心和微笑的猫放进去,否则你的数据库名称就很好......


只是为了明确一点:有多字节字符集每个 ASCII 字符需要一个以上的字节,但它们不能用作数据库字符集,因为它们有严格的“ASCII 超集”要求。 (实际上它的 ASCII 或 EBCDIC 取决于平台)。
W
Wild Pottok

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

这篇文章的其余部分适用于 Oracle 12.1 及更低版本:当时的限制是 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

I
Ian Carpenter
f
fg78nc

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


H
Harper Shelby

在我正在处理的 10g 数据库中,我知道表名最多为 30 个字符。无法告诉您列名长度是多少(但我知道它> 30)。


列名也限制为 30 个字符,而不是 > 30
A
Annu

最大名称大小为 30 个字符,因为数据字典只允许存储 30 个字节


G
Gerrit

Oracle 数据库对象名称的最大长度为 30 个字节。

对象名称规则:http://docs.oracle.com/database/121/SQLRF/sql_elements008.htm


V
Vaibhav

我正在开发 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


选择名称,值来自 v$parameter WHERE name = 'compatible';必须是 12.2.0
G
Gowtham Smv

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


这是一个神谕问题。