在本教學中將學習Oracle VARCHAR2
資料型別以及如何使用它來定義可變長度的字串列。
要儲存可變長度的字串,可以使用Oracle VARCHAR2
資料型別。 VARCHAR2
列可以儲存1
到4000
位元組的值。 這意味著對於單位元組字元集,最多可以在VARCHAR2
列中儲存4000
個字元。
當使用VARCHAR2
列建立表時,必須指定最大字串長度(以位元組為單位):
VARCHAR2(max_size BYTE)
或以字元 -
VARCHAR2(max_size CHAR)
預設情況下,如果沒有在max_size
之後顯式指定BYTE
或CHAR
,則Oracle使用BYTE
。 換句話說,VARCHAR2(N)
列最多可以容納N
個位元組的字元。
如果儲存大小超過VARCHAR2
列最大長度的字串,則Oracle發出錯誤。
例如,如果定義最大長度為20
的VARCHAR2
列,則在單位元組字元集中最多可以儲存20
個字元。 如果儲存了21
個或更多字元,則Oracle返回錯誤。
另外,如果在VARCHAR2(20)
列中儲存10
個字元,則Oracle僅使用10
個位元組進行儲存,而不是20
個位元組。 因此,使用VARCHAR2
資料型別可以幫助您節省表使用的空間。
比較VARCHAR2
值時,Oracle使用非填充比較語意。
從Oracle 12c開始,可以為VARCHAR2
資料型別最大長度為:32767
。 Oracle使用MAX_STRING_SIZE
引數來控制最大長度。 如果MAX_STRING_SIZE
是STANDARD
,則VARCHAR2
的最大大小是4000
位元組。 如果MAX_STRING_SIZE
為EXTENDED
,則VARCHAR2
的大小限制為32767
。
要獲取MAX_STRING_SIZE
引數的值,請使用以下查詢:
SELECT
name,
value
FROM
v$parameter
WHERE
name = 'max_string_size';
執行上面查詢語句,得到以下結果 -
SHOW PARAMETER max_string_size;
以下語句建立一個名為econtacts
的新錶來儲存員工的緊急聯絡人 -
CREATE TABLE econtacts (
econtact_id NUMBER generated BY DEFAULT AS identity PRIMARY KEY,
employee_id NUMBER NOT NULL,
first_name VARCHAR( 20 ) NOT NULL,
last_name VARCHAR( 20 ) NOT NULL,
phone VARCHAR( 12 ) NOT NULL,
FOREIGN KEY( employee_id ) REFERENCES employees( employee_id )
ON DELETE CASCADE
);
econtacts
表有三個VARCHAR2
列:first_name
,last_name
和phone
。
以下語句將新行插入到econtacts
表中:
INSERT
INTO
econtacts(
employee_id,
first_name,
last_name,
phone
)
VALUES(
1,
'Branden',
'Wiley',
'202-555-0193'
);
它按預期工作,因為輸入資料不會超過VARCHAR2
列的最大長度。
但是,以下語句未能成功插入:
INSERT
INTO
econtacts(
employee_id,
first_name,
last_name,
phone
)
VALUES(
10,
'Pablo Diego Jose Francisco',
'Gray',
'202-555-0195'
);
由於輸入名字超過了first_name
列的最大長度,Oracle發出以下錯誤:
SQL Error: ORA-12899: value too large for column "OT"."ECONTACTS"."FIRST_NAME" (actual: 26, maximum: 20)
在本教學中,您已經了解了Oracle VARCHAR2
以及如何使用VARCHAR2
資料型別在表中定義可變長度字串列。