在本教學中將學習Oracle VARCHAR2數據類型以及如何使用它來定義可變長度的字串列。
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 VARCHAR2最大長度
從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;
Oracle VARCHAR2的例子
以下語句創建一個名為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數據類型在表中定義可變長度字串列。
