/*
使用 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 個記錄。