Contents ...
udn網路城邦
Oracle 數值資料類型
2009/08/08 00:35
瀏覽3,573
迴響0
推薦0
引用0


數值資料類型

    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;

全站分類:心情隨筆 男女話題
自訂分類:DBMS
上一則: Oracle 10g Client 安裝設定
下一則: ORACLE VS MSSQL :建立編號方法
發表迴響

會員登入