Oracleのテーブル名の最大長はいくつですか?


回答:


282

オラクル12.2及び最大オブジェクト名の長さの上方には、128バイトです。

Oracle 12.1以前では、オブジェクト名の最大長は30バイトです。


6
実際には、compatibleパラメータのバージョンに基づいています。11.2に互換性のある12.2 DBを設定している場合でも、30文字に制限されます。
rtaft 2018年

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では、テーブルをクエリして長さを決定することもできます。select* from all_tab_columns where table_name = 'ALL_TAB_COLUMNS';
JustinKSU 2016年

1
ベーステーブルall_objectsを記述する方がよい場合があります。これは、名前の制限が、それに基づいてall_ *ビューを持つほとんどすべてのものに適用されることを示しているためです。
mormegil

1
塩の粒でこの答えを見てください。バージョン12.1.0.2.0でdescribe user_mview_logsは戻りますLOG_TABLE VARCHAR2(128)が、マテリアライズドビューのログ名に30文字以上に近づくと、かなり不可解な結果が得られます。
ソール

1
長さが128であっても、互換性のあるパラメーターが古いバージョンに設定されている場合は、30文字の制限に悩まされる可能性があります。
rtaft 2018年

19

DESCRIBE all_tab_columns

TABLE_NAME VARCHAR2(30)が表示されます

注VARCHAR2(30)は、30文字の制限ではなく30バイトの制限を意味するため、データベースがマルチバイト文字セットを使用するように構成/設定されている場合は異なる場合があります。

マイク


8

そうですが、ASCII文字を使用している限り、マルチバイト文字セットでも正確に30文字の制限があります...したがって、DB名にハートと笑顔の猫を入れたくない場合は...


明確にするために、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文字
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 name = 'compatible'; 12.2.0でなければなりません
rtaft

-4

テーブル名と列名の最大長は128バイトまたは128文字です。この制限は、sybaseデータベースユーザーを使用するためのものです。私はこの回答を徹底的に検証したので、自信を持ってこの回答を投稿しました。


3
それはオラクルの質問です。
Stefan Steinegger 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.