資料類型:
數字類型:
Number用來表示可變長的數值列,文法為Number(p, s),p是指所有有效數位位元,s是指小數點以後的位元;p和s的取值分別是p=1 to 38,s=-84 to 127;
有效數位:從左邊第一個不為0的數算起,小數點和負號不計入有效位元。
p>0,對s分3種情況:
1. s>0
精確到小數點右邊s位,並四捨五入。然後檢驗有效數位是否<=p;如果s>p,小數點右邊至少有s-p個0填充。
2. s<0
精確到小數點左邊s位,並四捨五入。然後檢驗有效數位是否<=p+|s|
3.s是0或者未指定,四捨五入到最近整數。
注意:當p小於s時候,表示數字是絕對值小於1的數字,且從小數點右邊開始的前s-p 位必須是0,保留s位小數。
比如
Value Datatype Stored Value
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6) 1235
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999
0.099996 NUMBER(4,5) <>
用法如下:
create table t_n(id number(5,2));
insert into t_n values(123.455);
insert into t_n values(1.234);
insert into t_n values(.001);
select * from t_n 結果為:
Number類型儲存實數,PLS_Integer和BINARY_Integer只能儲存整數。
字元類型:
Char表示定長的字串,文法Char(L),L是可選的。如果沒有指定L值,預設為1;最大長度為32767。
VarChar2用來儲存可變的字串,文法VarChar2(L),L是必須的。最大長度為32767。
布爾類型:
Boolean類型的合法賦值為True、False和Null。
類型轉換:
To_Char:可以將Number和Date類型轉換為Varchar2類型;
To_Date:將Char類型轉換Date類型;
To_Number:將Char類型轉換Number類型;
變數和常量:
變數名稱:1.必須以字母開頭;2.其後可以跟一個或多個字母、數字(0~9)、特殊字元$、#或_ ;
3.變數長度不超過30個字元;4.變數名中不能有空格。
1.變數的聲明:
DECLARE
v_StudentName VARCHAR2(20),
v_CurrentDate DATE;
v_NumberCredits NUMBER(3);
2.自訂的資料類型:
DECLARE
TYPE t_StudentRecord IS RECORD (FirstName Varchar2(10),LastName Varchar2(10),
CurrentCredits NUMBER(3));
v_Student t_StudentRecord;
3.變數屬性:
下面介紹常見的幾種複合資料型別變數的定義。
(1)使用%type定義變數
為了讓PL/SQL中變數的類型和資料表中的欄位的資料類型一致,Oracle 9i提供了%type定義方法。這樣當資料表的欄位類型修改後,PL/SQL程式中相應變數的類型也自動修改。如下:
declare
mytable emp.empno%type;
begin
select a.empno into mytable
from emp a
where a.ename='SCOTT';
dbms_output.put_line(mytable);
end;
(2)使用%rowtype定義變數
使用%type可以使變數獲得欄位的資料類型,使用%rowtype可以使變數獲得整個記錄的資料類型。
比較兩者定義的不同:變數名 資料表.列名%type,變數名 資料表%rowtype。
declare
mytable emp%rowtype;
begin
select * into mytable
from emp a
where a.ename='SCOTT';
dbms_output.put_line(mytable.empno||' '||mytable.job);
end;
流程式控制制:
待續。。。