數值資料類型
BINARY_INTEGER資料類型
採用二進位制儲存,執行密集的整數計算,可採用此類型
PLS_INTEGER資料類型
Oracle建議用此類型取代BINARY_INTEGER
NUMBER資料類型
十進位數值資料類型
PLS_INTEGER溢位例外處理
PLS_INTEGER和BINARY_INTEGER的變數具有相同值域,但計算處理的方式不同
BINARY_INTEGER碰到溢位計算時,並不會產生例外警訊,而PLS_INTEGER在類似溢位狀況時,將會提出例外,方便設計者的偵錯
PLS_INTEGER所需儲存空間比NUMBER少,採用機械算術,執行更有效率!
NUMBER資料類型
NUMBER (precision,scale)
如果scale是正值,scale將會決定在小數點右邊四捨五入的位置
Quote
例1: counter_number(10,3)
12345.6784 =>12345.678
如果scale是負值,scale將會決定在小數點左方四捨五入的位置
Quote
例2: rounded_hundred(5,-2)
12345=>12300
如果準確度是0,四捨五入會發生於最接近整數
字元資料類型CHAR
CHAR資料類型把字元字串值指定為固定長度,變數右邊將以空格填滿
若宣告不指示字串長度,將會是宣告1個位元組的字串,將容易產生問題
Oracle資料庫的CHAR資料類型最高只存255個字元
除非有固定長度字串的需求或者是DB2的資料來源,不然建議採用VARCHAR2
字元資料類型VARCHAR2
PL/SQL以varchar2類型接收Oracle的char類型,將會自動去除後端的空白; 以char類型接收varchar2類型,將會補滿空白
Oracle的varchar2接收char時,將不會去除空白,Oracle的char接收varchar2會補滿空白
Oracle資料庫的varchar2類型僅可存入2000個字元
*Oracle的LONG類型可存入2GB,因此可將PL/SQL的varchar2插入LONG資料欄
字串變數在比較時
如果是兩個CHAR變數之間比較,將會自動填滿到一樣的空格數比較,這只是把值複製到另一個記憶體空間,並未修改變數
建議採用RTRTM(移去尾端的空白)函數,讓程式正常執行
LONG資料類型
表格的LONG資料欄不可以多於一個
不可在GROUP BY,ORDER BY,WHERE,CONNECT BY 子句中,使用LONG資料欄
不可對LONG資料欄使用字元函數(如 SUBSTER,INSTR 或 LENGTH)
LONG在資料庫具有重要的地位,但在PL/SQL中,建議使用VARCHAR2較佳RAW,LONG RAW 資料類型
RAW資料類型是用來儲存二進位資料或其他類型的原始資料,像是數位的相片或圖片
此類型被移動到另一個系統時,Oracle不會對資料進行字元集轉換
LONG RAW在資料庫中有它的地位,但PL/SQL建議採用RAW資料類型
ROWID 資料類型
資料在存入資料庫的每一列時,將會產生一個虛擬資料欄;rowid是用來存取,定位,擷取特定資料列的最快方法,甚至比用主鍵還快,PL/SQL採用ROWID資料類型來儲存資料庫的rowid
ROWID雖能提昇搜尋速度,但最終將使程式碼比用主鍵搜尋的難以理解,並在未來可能發生可攜性問題,不建議使用BOOLEAN, DATE 資料類型
BOOLEAN只存TRUE,FALSE,NULL,對於一些程式的撰寫,很有幫助
比較日期時,記得採用TRUNC函數,將可避免一些錯誤,如:
IF TRUNC(hire_date)=TRUNC(fire_date) 取代 IF hire_date=fire_date
LOB資料類型
LOB可儲存大量的原始資料,二進位資料(如圖片)或字元本文資料
一.BFILE-宣告變數持有檔案定位器(locator),指向位在資料庫外
二.BLOB-宣告變數持有LOB定位器,指向大型的二進位物件
三.CLOB-宣告變數持有LOB定位器,指向大型區塊的單位元組之固定寬度字元資料
四.NCLOB-宣告變數持有LOB定位器,指向大型區塊的單位元組或故定寬度多位元組字元資料
BFILE的特性
BFILE的值是儲存在作業系統檔案中,不是在資料庫內
BFILE不參予交易(對BFILE的改變不能倒回或確認)
當宣告BFILE變數時,我們會分配到記憶體來儲存BFILE的檔案定位器,而不是BFILE的內容BLOB,CLOB,NCLOB的特性
此三類的值是存入資料庫中,但是並非存在資料表內;在具有LOB的表格,有一列資料會包含對LOB資料的地位器,而非真正的LOB內容
對此三類的LOB做任何改變,都能與交易中其他重大改變一起被倒回或確認,但不能跨交易或交談期LONG與LOB的比較
LONG最大容量2GB,LOB最大容量4GB
DBMS_LOB內建套裝程式,將可提供LONG類型所不能的執行方式,如:LONG只能循序存取,LOB可以隨機存取;DBMS_LOB可對LOB執行字元指令
資料類型之轉換-外顯與內隱
當資料類型做轉換時,外顯式會優先被採用
內隱式的缺點:
1.在更新Oracle版本後,若改變執行轉換 的方法和環境,程式碼將會出問題
2.PL/SQL的內隱式轉換不一定如你所要
3.採用外顯示容易閱讀
PL/SQL中的NULL
NULL決不會等於其他事物
例1 my_string1:=‘ ‘;
IF my_string1 = NULL THEN
例2 my_string2:=0;
IF my_string2 = NULL THEN
例3 IF NULL = NULL THEN
以上都不會成立
檢查NULL值
判斷變數是否為變數,請採用IS NULL 或IS NOT NULL
例:
Code:
IF hire_date >= SYSDATE OR hire_date IS NULL THEN
DBMS_OUTPUT.PUT_LINE(‘OK’);
END IF;
其他的一些變數宣告事項
NOT NULL (不可是虛值)
variable_name datatype NOT NULL;
如:
company_name VARCHAR2(20) NOT NULL;
預設值
variable_name datatype DEFAULT default_value;
如:
term_limit NUMBER DEFAULT 3;


