Oracleのテーブル名と列名の最大長は?
Oracle 12.2 以上では、オブジェクト名の最大長は128バイトです。
Oracle 12.1 以下では、オブジェクト名の最大長は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)
DESCRIBE all_tab_columns
tABLE_NAME VARCHAR2(30)が表示されます
注VARCHAR2(30)は、30文字の制限ではなく30バイトの制限を意味するため、データベースがマルチバイト文字セットを使用するように構成/設定されている場合は異なる場合があります。
マイク
正しいですが、ASCII文字を使用している限り、マルチバイト文字セットでも正確に30文字の制限があります。そのため、DB名には、ハートと笑顔の猫を入れない限り、いいね...
30文字(バイト、実際、前述のとおり)。
しかし、私を信頼しないでください。これを自分で試してください:
SQL> create table a23456789012345678901234567890 (my_id number);
Table created.
SQL> create table a234567890123456789012345678901(my_id number);
ERROR at line 1:
ORA-00972: identifier is too long
更新:前述のように、Oracle 12.2以降では、オブジェクト名の最大長は128バイトになりました。
スキーマオブジェクトの命名規則も使用できます。
http://download.Oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements008.htm#sthref72
Oracle 12.2
では、組み込みの定数ORA_MAX_NAME_LEN
を使用して、128バイト(12.2に準拠)に設定できます。Oracle 12.1
より前は、最大サイズは30バイトでした。
Oracleデータベースのオブジェクト名の最大長は30バイトです。
オブジェクト名ルール: http://docs.Oracle.com/database/121/SQLRF/sql_elements008.htm
私が扱っている10gデータベースでは、テーブル名が最大30文字であることを知っています。列名の長さを知ることができませんでした(ただし、30を超えることはわかっています)。
名前の最大サイズは30文字です。これは、データディクショナリが30バイトのストレージのみを許可するためです。
Oracle 12c 12.1で作業しています。ただし、列/テーブル名に30文字以上を許可しているようには見えません。
30バイトに言及しているOracleページを読んでください。 https://docs.Oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF0022
12cでは、all_tab_columnsはTable_Nameに対してVARCHAR2(128)と言いますが、30バイトを超える名前は許可しません。
12c R2に関する別の記事を見つけましたが、これはこれを最大128文字まで許可しているようです。 https://community.Oracle.com/ideas/3338