Oracle中的取值范圍是指在數據庫中可以存儲的數據類型所能包含的取值范圍。此外,根據數據類型的不同,其取值范圍也會不同。本文將詳細探討Oracle中不同數據類型的取值范圍,并以實際的例子來說明。
一、字符類型
字符類型包含了char和varchar2兩種類型。char類型是固定長度的字符數據類型,varchar2則是可變長度的字符數據類型。舉例說明,當我們使用char(10)表示字符類型時,就意味著它只能存儲長度等于10的字符;而若使用varchar2(10)表示字符類型時,則表示它最多只能存儲長度為10的字符,但實際長度可能不同。
DECLARE
v_char CHAR(10) := '123';
v_varchar VARCHAR2(10) := '123';
BEGIN
DBMS_OUTPUT.PUT_LINE('v_char: ' || v_char);
DBMS_OUTPUT.PUT_LINE('v_varchar: ' || v_varchar);
END;
以上例子中,v_char變量中存儲的字符長度固定為10,所以輸出結果為:
v_char: 123
v_varchar: 123
但是,接下來使用v_varchar變量,將其賦值為長度為4的字符,輸出結果如下:v_varchar := 'abcd';
DBMS_OUTPUT.PUT_LINE('v_varchar: ' || v_varchar);
輸出結果:
v_varchar: abcd
二、數值類型
數值類型包含了number、int、float等幾種類型。number類型是最通用的數值類型,能夠存儲任意范圍和精度的數值。在Oracle中,以p、s這兩個參數來定義其精度和小數位數,p代表總位數,s代表小數點后位數。例如:number(10,2)表示的是總位數為10,小數點后有2位小數的數字類型。DECLARE
v_number1 NUMBER(2,1) := 123.4;
v_number2 NUMBER(2,1) := 12.3;
BEGIN
DBMS_OUTPUT.PUT_LINE('v_number1: ' || v_number1);
DBMS_OUTPUT.PUT_LINE('v_number2: ' || v_number2);
END;
以上例子中,v_number1變量中定義的總位數為2,其中小數點后位數為1,因此輸出結果為:
v_number1: 12.3
v_number2: 12.3
三、日期類型
Oracle中日期類型是用Date類型來管理的。Date類型的取值范圍是從公元前4712年到公元9999年,精確到秒。在Oracle中,一些日期函數如SYSDATE,可以返回當前系統的日期和時間,另一些函數如TO_CHAR、TO_DATE則可以用來轉換日期類型的格式。DECLARE
v_date DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.PUT_LINE('v_date: ' || TO_CHAR(v_date, 'YYYY-MM-DD HH24:MI:SS'));
END;
以上例子中,v_date變量中保存當前系統的時間,輸出格式化后會顯示如下格式:
v_date: 2021-10-19 11:56:12
四、布爾類型
Oracle中存在布爾類型,需要通過定義約束來實現。其中,約束NOT NULL、CHECK、DEFAULT、PRIMARY KEY、FOREIGN KEY都可以用于設置布爾類型。在Oracle中,TRUE表示‘1’,而FALSE則表示‘0’。CREATE TABLE emp (
emp_id NUMBER(4),
emp_name VARCHAR2(10),
is_manager NUMBER(1) DEFAULT 0 CONSTRAINT emp_is_manager_ck CHECK(is_manager IN (0,1))
);
INSERT INTO emp (emp_id, emp_name, is_manager) VALUES (1, 'John', TRUE);
SELECT * FROM emp;
以上例子中,定義了一個員工表,其中is_manager列就是布爾類型,為了保證其取值為0或1,使用約束來設置條件。通過INSERT語句向該表中插入一條數據,is_manager的值為TRUE,在SELECT查詢結果中,TRUE被轉換為1,輸出結果為:
EMP_ID | EMP_NAME | IS_MANAGER
-------------------------------
1 | John | 1
總結:
Oracle中支持多種數據類型,每種數據類型的取值范圍也不盡相同。本文結合實際案例對字符、數值、日期、布爾四種類型的取值范圍進行了詳細講解,希望能對讀者有所幫助。