2009年1月16日 星期五

DB2心得分享


第一部份 Overview of DB2

t
  • connect to user using
  • get connection state
  • connect reset or terminate
  • list applications [show detail]   (顯示目前所有的連線)
  • force application (num[,num])   (中斷num號的連線)
  • force application all   (中斷所有連線)
  • list tables [for {user | all | system | schema}] [show detail]
  • describe {選取陳述式 | {table | indexes for table name} [show detail] }

第二部份 SQL指令
1.字串函數

  • lcase(string)      轉換成小寫
  • ucase(string)      轉換成大寫
  • cast(string as datatype)      轉換成不同的資料型態
  • char(input)      input轉換成字串
  • length(string)      回傳字串長度
  • substr(string,m[,n])      截取串列中字串
  • concat(str1, str2)      字串的連結
  • ltrim(string)      左側空白字元截斷
  • rtrim(string)      右側空白字元截斷
  • replace(string, old, new)      new取代字串中所有old
  • coalesce(expr1,expr2)      expr1null時,則以expr2處理


2.數值函數

  • round(expr,p)     以四捨五入的方式表示十進制並包含精度,p>0則表示小數點的精準度(小數下一位),若p<0則表示整數位的精準度(整數位本身)round(45.923,1) => 45.9round(45.923,-1) => 50
  • trunc(expr,p)    以捨去的方式表示十進制並包含精度
  • mod(m,n)    求餘數。m為分母,n為分子
  • abs(expr)     取絕對值
  • sqrt(expr)     求平方根  sqrt(4) => 2
3.時間函數

  • year                傳回日期的年份
  • month             傳回日期的月份
  • monthname     傳回日期的月份全名
  • week              傳回日期在一年中第幾週
  • dayname        傳回星期幾
  • dayofweek      傳回星期幾(數字)
  • day                 傳回日期在該月份中的第幾天
  • days               傳回日期在一年中的第幾天
  • dayofyear        傳回日期在一年中的第幾天(數字)
  • quarter            傳回日期在一年中的第幾季
  • date                傳回日期
  • time                傳回時間
  • timestamp       傳回時間擢記(年月日時分秒微秒)
4.trigger 的建立

t    Trigger的事件
    (1).insert
    (2).update
    (3).delete

t    Trigger的種類
    (1).事件前(before trigger)
         a.可以檢查輸入資料是否正確。
         b.可以設定及修改輸入直欄的資料。
         c.可以中止命令的執行。
    (2).事件後(after trigger)
         a.可以對其他表格作insertupdatedelete等動作。
         b.可以撰寫一個以上的程序。

      trigger的建立-before tirgger範例

    create trigger test_trigger_1
    no cascade
    before insert on test
    referencing new as newrow
    for each row mode db2sql
    set newrow.seq=(select table_seq from seq where table_name=‘test’)

     trigger的建立-after tirgger範例

    create test_trigger_2
    after insert on test
    referencing new as newrow
    for each row mode db2sql
    begin atomic
    update seq
    set seq.table_seq=newrow.seq
    where seq.table_name=test;
    end
5.view 的建立

view 是一個由表格所衍生出來的虛擬表格。
Ex1.
create view emp_high_pay as
select empno, firstnme, lastname, workdept, hiredate, bonus
from employee where bonus>500
Ex2.
create view low_bonus_dept (dept, min_bonus) as
select workdept,min(bonus)
from employee group by workdept 

第三部份 資料的搬運
1.EXPORT Utility

tEXPORT Utility 語法
      EXPORT TO file-name OF file-type {DEL|ASC|IXF|WSF}
      [METHOD N (column names)]
      MESSAGES log-file-name
      SQL-COMMEND

  • File-name:匯出之檔案名稱,附檔名同file-type。
  • File-type匯出之檔案格式,有DEL、ASC、IXF及WSF四種匯出之檔案格式。
  • METHOD N (column names)指定欄位名稱;這個選項只對IXFWSF格式有效。
  • Log-file-namelog之檔案名稱。
  • SQL-COMMENT:一般的查詢指令。
2.IMPORT Utility

tIMPORT Utility 語法
      IMPORT FROM file-name OF file-type
      {DEL|ASC|IXF|WSF}
      [[METHOD L(start end)]|[METHOD N(column name)]| [METHOD P(column num)]]
      [COMMITCOUNT num] [RESTARRTCOUNT num]
      MESSAGES log-file-name
      {INSERT|INSERT_UPDATE|REPLACE|CREATE|REPLACE_CREATE} INTO table-name
t
  • File-name:匯入之檔案名稱,附檔名同file-type
  • File-type:匯入之檔案格式,有DELASCIXFWSF四種匯入之檔案格式。
  • METHOD L(start end):指定每個欄位的起始與結束位置。只適用於ASC格式的檔案。
  • METHOD N (column names):指定欄位名稱;這個選項只適用IXF格式。
  • METHOD P(column num):指定欄位的號碼;只適用於IXF與DEL格式。
  • COMMITCOUNT num:指定commitcount
  • RESTARRTCOUNT num:指定要從資料檔的第幾筆資料列開始匯入資料。
  • INSERT 新增模式:匯入的方式以INSERT INTO子句來新增資料至要匯入的表格中,若匯入的資料已存在表格中時,那匯入公用程式就會忽略這些資料
  • INSERT_UPDATE 新增-修改模式:與INSERT模式不同之處在於如果已有存在的資料時,那匯入公用程式就會以UPDATE來更新PK以外的其欄位的DATA。
  • REPLACE 覆寫模式:與INSERT或INSERT_UPDATE完全不相同,匯入公用程式會先將表格中所有橫列先用DELETE刪除後再INSERT INTO新增資料(所有現存的資料列會被刪除)。
  • CREATE 建立模式:當使用IXF檔案格式時,*.IXF檔案會記錄著表格的結構與資料,當匯入的表格中若不存在時,可以使用IXF格式的檔案來建立表格的結構並且將DATA一同新增到表格中。
  • REPLACE_CREATE 覆寫-建立模式 :若表格不存在時,其方式和CREATE模式相同,若表格存在時那就會使用REPLACE的方式將表格中資料先DELETE刪除再INSERT INTO新增資料表格中。
3.LOAD Utility

LOAD Utility—

      LOAD FROM "d:/db2 share/data/employee.ixf"
      OF IXF
      MESSAGES "d:/db2 share/log/employee.txt"
      insert INTO emptmp
      set constraints for emptmp immediate checked

LOAD Utility-- LOADIMPORT異同

tLOAD
  1.表格必須存在。
  2.將資料準備成資料頁讀入。
  3.不會記錄到交易日誌。
  4.表格上若有constraint,在load後需要用set integrity指令將不符合規則的資料列剔除。
  5.若表格有trigger,在load當中,是不會觸發的。

tIMPORT
  1.若輸入為ixf格式,表格可不存在。
  2.一筆一筆insert到表格中。
  3.會記錄到交易日誌。
  4.表格上若有constraint,在執行import時,每一筆都會經過檢查。
  5.若表格有triggerimport時會觸發trigger。 


沒有留言: