Oracle Varchar2型別


在本教學中將學習Oracle VARCHAR2資料型別以及如何使用它來定義可變長度的字串列。

Oracle VARCHAR2資料型別簡介

要儲存可變長度的字串,可以使用Oracle VARCHAR2資料型別。 VARCHAR2列可以儲存14000位元組的值。 這意味著對於單位元組字元集,最多可以在VARCHAR2列中儲存4000個字元。

當使用VARCHAR2建立表時,必須指定最大字串長度(以位元組為單位):

VARCHAR2(max_size BYTE)

或以字元 -

VARCHAR2(max_size CHAR)

預設情況下,如果沒有在max_size之後顯式指定BYTECHAR,則Oracle使用BYTE。 換句話說,VARCHAR2(N)列最多可以容納N個位元組的字元。

如果儲存大小超過VARCHAR2列最大長度的字串,則Oracle發出錯誤。

例如,如果定義最大長度為20VARCHAR2列,則在單位元組字元集中最多可以儲存20個字元。 如果儲存了21個或更多字元,則Oracle返回錯誤。

另外,如果在VARCHAR2(20)列中儲存10個字元,則Oracle僅使用10個位元組進行儲存,而不是20個位元組。 因此,使用VARCHAR2資料型別可以幫助您節省表使用的空間。

比較VARCHAR2值時,Oracle使用非填充比較語意。

Oracle VARCHAR2最大長度

從Oracle 12c開始,可以為VARCHAR2資料型別最大長度為:32767。 Oracle使用MAX_STRING_SIZE引數來控制最大長度。 如果MAX_STRING_SIZESTANDARD,則VARCHAR2的最大大小是4000位元組。 如果MAX_STRING_SIZEEXTENDED,則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_namelast_namephone

以下語句將新行插入到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資料型別在表中定義可變長度字串列。