2008年9月7日 星期日

Global variable and federated stored procedure using DB2 9


/*
  使用 DB2 9 的新功能(global variable / federated stored procedure):
  1) create global variable、Materialized Query Table、stored procedure
  2) update dbm cfg 將 FEDERATED 設為YES
  3) create another database: ORIONDB
  4) create wrapper、server、federated stored procedure
*/

-- 在 database SAMPLE 上建立 global variable

connect to sample

  資料庫連線資訊

 資料庫伺服器     = DB2/NT 9.5.0
 SQL 授權 ID     = ORION
 本地資料庫別名    = SAMPLE

-- 建立一個 global variable:startdate 預設值 20080908

create variable startdate integer default 20080908

-- 分別建立一個 table、MQT、stored procedure

create table test
(
  col1 integer,
  col2 varchar(2)
) in userspace1;

-- MQT 裡使用 global variable: startdate

create table mqt_test as
(
  select * from test where col1 >= startdate
) data initially deferred refresh deferred in userspace1;

-- 建立 stored procedure: SP_TEST 來新增 Table test

create procedure SP_TEST(in dt integer,
              in str varchar(2))
specific SP_TEST
language sql
begin
    insert into test values (dt,str);
    commit;
end

-- 新增資料至 test

CALL SP_TEST(20080101,'AA');

  傳回狀態 = 0

CALL SP_TEST(20080105,'BB');

  傳回狀態 = 0

CALL SP_TEST(20081005,'CC');

  傳回狀態 = 0

-- Refresh mqt table

refresh table mqt_test

DB20000I SQL 指令已順利完成。

-- 讀取 mqt table

select * from mqt_test

COL1     COL2
----------- ----
20081005   CC

已選取 1 個記錄。

-- 將 FEDERATED 設為YES

db2 update dbm cfg using FEDERATED YES

db2stop

db2start

-- CREATE DATABASE ORIONDB

create database oriondb on 'c:\' using codeset UTF-8 TERRITORY TW COLLATE using SYSTEM

DB20000I CREATE DATABASE 指令已順利完成。


-- 使用控制中心(db2cc)
-- 選擇資料庫ORIONDB。
-- 如圖,所建Wrapper名稱為WINDB,所建Server名稱為SAMPLE
-- 在聯合儲存程序中,將剛在SAMPLE資料庫建的SP_TEST新增進來



-- 建立 federated stored procedure 語法大致如下:

CREATE PROCEDURE ORION.SP_TEST SOURCE ORION.SP_TEST NUMBER OF PARAMETERS 2 FOR SERVER SAMPLE;


--新增儲存程序時,DB2 會自動為 SAMPLE 裡的 SYSWSIIDB2UDB_ROUTINES 建一個 NICKNAME 進來


-- 在 DB ORIONDB 呼叫 SAMPLE 的 SP_TEST

call sp_test(20080918,'gg')

  傳回狀態 = 0

-- 回到 DB SAMPLE 去檢查

connect to sample

  資料庫連線資訊

 資料庫伺服器    = DB2/NT 9.5.0
 SQL 授權 ID    = ORION
 本地資料庫別名   = SAMPLE

select * from test

COL1      COL2
-------------- ----
20080101    AA
20080105    BB
20081005    CC
20080918    gg

已選取 4 個記錄。

-- REFRESH MQT TABLE

refresh table mqt_test

DB20000I SQL 指令已順利完成。

select * from mqt_test

COL1      COL2
-------------- ----
20081005    CC
20080918    gg

已選取 2 個記錄。

-- 將 global variable startdate 值改為 20071231

set startdate = 20071231

DB20000I SQL 指令已順利完成。

-- REFRESH MQT TABLE

refresh table mqt_test

DB20000I SQL 指令已順利完成。

select * from mqt_test

COL1       COL2
-------------- ------
20080101     AA
20080105     BB
20081005     CC
20080918     gg

已選取 4 個記錄。