ความยาวสูงสุดของชื่อตารางใน Oracle คืออะไร


คำตอบ:


283

ในOracle 12.2และสูงกว่าความยาวชื่อวัตถุสูงสุดคือ 128 ไบต์

ในOracle 12.1และต่ำกว่าความยาวชื่อวัตถุสูงสุดคือ 30 ไบต์


6
จริง ๆ แล้วมันขึ้นอยู่กับรุ่นในพารามิเตอร์ที่เข้ากันได้ หากคุณมีฐานข้อมูล 12.2 ที่มีการตั้งค่าที่เข้ากันได้เป็น 11.2.0 จะยังคง จำกัด คุณไว้ที่ 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 มาตรฐานคุณสามารถกำหนดความยาวได้ด้วยการสืบค้นตาราง: select * from all_tab_columns โดยที่ table_name = 'ALL_TAB_COLUMNS';
JustinKSU

1
มันอาจเป็นการดีกว่าที่จะอธิบายตารางฐานall_objectsเนื่องจากการแสดงข้อ จำกัด ของชื่อนั้นใช้กับทุกสิ่งที่มีมุมมองแบบ all_ * ที่อิงกับมัน
mormegil

1
ตอบคำถามนี้ด้วยเกลือเม็ดหนึ่ง ในเวอร์ชัน 12.1.0.2.0 describe user_mview_logsจะกลับมาLOG_TABLE VARCHAR2(128)แต่ถ้าคุณลองอะไรก็ตามที่มีความยาว 30 ตัวอักษรขึ้นไปสำหรับชื่อไฟล์บันทึกการดูที่ปรากฏขึ้นคุณจะได้ผลลัพธ์ที่น่าสงสัย
ซาอูล

1
แม้จะมีความยาว 128 แต่คุณยังสามารถติดกับขีด จำกัด ถ่าน 30 ถ้าพารามิเตอร์ที่เข้ากันได้ของคุณถูกตั้งค่าเป็นรุ่นที่เก่ากว่า
rtaft

19

DESCRIBE all_tab_columns

จะแสดง TABLE_NAME VARCHAR2 (30)

หมายเหตุ VARCHAR2 (30) หมายถึงการ จำกัด 30 ไบต์ไม่จำกัดความยาว 30 อักขระและอาจแตกต่างกันหากฐานข้อมูลของคุณถูกกำหนดค่า / ตั้งค่าให้ใช้ชุดอักขระแบบมัลติไบต์

ไมค์


8

ถูกต้อง แต่ตราบใดที่คุณใช้อักขระ ASCII แม้ชุดอักขระแบบมัลติไบต์จะยังคงมีข้อ จำกัด อยู่ที่ 30 อักขระ ... ดังนั้นหากคุณไม่ต้องการใส่หัวใจและแมวยิ้มในฐานข้อมูลของคุณ ...


เพียงเพื่อให้ชัดเจน: มีชุดอักขระหลายไบต์ซึ่งต้องใช้มากกว่าหนึ่งไบต์ต่ออักขระ ASCII แต่ไม่สามารถใช้เป็นชุดอักขระฐานข้อมูลเนื่องจากมีข้อกำหนด "ASCII superset" ที่เข้มงวดสำหรับพวกเขา (อันที่จริงคือ 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 ตัว

อ่านหน้า oracle ที่กล่าวถึง 30 ไบต์ https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223

ใน 12c แม้ว่า all_tab_columns จะบอกว่า VARCHAR2 (128) สำหรับ Table_Name แต่จะไม่อนุญาตให้มีชื่อเกิน 30 ไบต์

พบบทความอื่นเกี่ยวกับ 12c R2 ซึ่งดูเหมือนว่าจะอนุญาตให้ใช้ตัวอักขระสูงสุด 128 ตัว https://community.oracle.com/ideas/3338


2
ชื่อที่เลือกค่าจากพารามิเตอร์ $ v WHERE name = 'Compatible'; ต้องเป็น 12.2.0
rtaft

-4

ความยาวสูงสุดของชื่อตารางและคอลัมน์คือ 128 ไบต์หรือ 128 อักขระ ขีด จำกัด นี้ใช้สำหรับผู้ใช้ฐานข้อมูล sybase ฉันตรวจสอบคำตอบนี้อย่างละเอียดเพื่อที่ฉันจะได้โพสต์คำตอบนี้อย่างมั่นใจ


3
มันเป็นคำถามพยากรณ์
Stefan Steinegger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.