Độ dài tối đa của một tên bảng trong Oracle là bao nhiêu?


Câu trả lời:


282

Trong Oracle 12.2 trở lên, độ dài tên đối tượng tối đa là 128 byte.

Trong Oracle 12.1 và dưới độ dài tên đối tượng tối đa là 30 byte.


6
Nó thực sự dựa trên phiên bản trong thông số tương thích. Nếu bạn có DB 12.2 với bộ tương thích được đặt thành 11.2.0, vẫn giới hạn ở mức 30 ký tự.
rtaft

220

Dạy một người đàn ông câu cá

Lưu ý kiểu dữ liệu và kích thước

>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
Với SQL chuẩn, bạn cũng có thể xác định độ dài bằng cách truy vấn bảng: select * từ all_tab_columns trong đó tên_bảng = 'ALL_TAB_COLUMNS';
JustinKSU 11/03/2016

1
Có thể tốt hơn để mô tả bảng cơ sở all_objects , vì điều đó cho thấy giới hạn tên áp dụng cho hầu hết mọi thứ có chế độ xem all_ * dựa trên nó.
mormegil

1
Lấy câu trả lời này với một hạt muối. Trên phiên bản 12.1.0.2.0 describe user_mview_logstrả về LOG_TABLE VARCHAR2(128)nhưng nếu bạn thử bất cứ thứ gì tiếp cận từ 30 ký tự trở lên cho tên nhật ký xem được cụ thể hóa, bạn sẽ nhận được một số kết quả khá khó hiểu.
Saul

1
Mặc dù có độ dài 128, bạn vẫn có thể bị kẹt với giới hạn 30 char nếu thông số tương thích của bạn được đặt thành phiên bản cũ hơn.
rtaft

19

MÔ TẢ all_tab_columns

sẽ hiển thị TABLE_NAME VARCHAR2 (30)

Lưu ý VARCHAR2 (30) có nghĩa là giới hạn 30 byte, không giới hạn 30 ký tự và do đó có thể khác nếu cơ sở dữ liệu của bạn được định cấu hình / thiết lập để sử dụng bộ ký tự đa dòng.

Mike


8

Đúng, nhưng miễn là bạn sử dụng các ký tự ASCII, ngay cả một bộ ký tự đa nhân vẫn sẽ giới hạn chính xác 30 ký tự ... vì vậy trừ khi bạn muốn đặt trái tim và mèo cười vào tên DB của bạn ...


Nói rõ hơn: có các bộ ký tự nhiều byte yêu cầu nhiều hơn một byte cho mỗi ký tự ASCII, nhưng chúng không thể được sử dụng làm bộ ký tự cơ sở dữ liệu vì có yêu cầu "siêu dữ liệu ASCII" nghiêm ngặt đối với chúng. (thực sự là ASCII hoặc EBCDIC của nó tùy thuộc vào nền tảng).
eckes

5

30 char (byte, thực sự, như đã nêu).

Nhưng đừng tin tôi; Hãy thử điều này cho chính mình:

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

Đã cập nhật: như đã nêu ở trên, trong Oracle 12.2 trở lên, độ dài tên đối tượng tối đa hiện là 128 byte.



1

Trong cơ sở dữ liệu 10g tôi đang xử lý, tôi biết tên bảng được tối đa 30 ký tự. Không thể cho bạn biết độ dài tên cột là gì (nhưng tôi biết nó> 30).


1
Tên cột cũng được giới hạn trong 30 ký tự, không phải> 30
Justin Cave

1

Kích thước tên tối đa là 30 ký tự do từ điển dữ liệu cho phép lưu trữ chỉ trong 30 byte


1

Bật Oracle 12.2, bạn có thể sử dụng hằng số tích ORA_MAX_NAME_LENhợp, được đặt thành 128 byte (theo 12.2) Trước Oracle 12.1kích thước tối đa là 30 byte.



0

Tôi đang làm việc trên Oracle 12c 12.1. Tuy nhiên, dường như không cho phép hơn 30 ký tự cho tên cột / bảng.

Đọc qua một trang orory có đề cập đến 30 byte. https://docs.oracle.com/database/121/SQLRF/sql_elements008.htmlm#QueryRF00223

Trong 12c mặc dù all_tab_columns nói VARCHAR2 (128) cho Table_Name, nhưng nó không cho phép nhiều hơn 30 byte tên.

Tìm thấy một bài viết khác về 12c R2, dường như cho phép điều này lên tới 128 ký tự. https://community.oracle.com/ideas/3338


2
Tên CHỌN, giá trị TỪ v $ tham số WHERE name = 'tương thích'; Phải là 12.2.0
rtaft

-4

Độ dài tối đa của tên bảng và cột là 128 byte hoặc 128 ký tự. Giới hạn này là để sử dụng người dùng cơ sở dữ liệu sybase. Tôi đã xác minh câu trả lời này kỹ lưỡng, để tôi tự tin đăng câu trả lời này.


3
đó là một câu hỏi tiên tri.
Stefan Steinegger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.