在SQL過程和SQL語句中測試DB2臨時表
本文將會為您測試在DB2數據庫中,分別在SQL過程以及SQL語句中創建臨時表,并插入數據后,執行結果有何異同之處,供您參考,希望對您有所啟迪。
測試目標:
分別在SQL過程和SQL語句中創建臨時表,并插入數據,看執行結果有什么異同。
測試環境:
DB2 UDB V9.1
執行附件里面的SQL語句,得到一個表。
測試代碼和運行結果:
一、臨時
DB2臨時表在SQL過程和SQL語句中的測試總結
測試目標:
分別在SQL過程和SQL語句中創建臨時表,并插入數據,看執行結果有什么異同。
測試環境:
DB2 UDB V9.1
執行附件里面的SQL語句,得到一個表。#p#
測試代碼和運行結果:
一、臨時表在SQL語句中
-- 定義一個全局臨時表SESSION.RESULT
DECLARE GLOBAL TEMPORARY TABLE SESSION.RESULT
(
TMP_HYDM VARCHAR(10), -- 行業代碼
TMP_HYMC VARCHAR(300) -- 行業名稱
)
WITH REPLACE
NOT LOGGED;
-- 插入數據到臨時表
INSERT INTO SESSION.RESULT
SELECT MLDM,MLMC FROM DM_HY_CY;
-- 查詢臨時表數據
SELECT * FROM SESSION.RESULT;
測試結果:以上SQL代碼正常執行,但是沒有查詢到任何數據。
二、臨時表在SQL存儲過程中
CREATE PROCEDURE SP_TEST_TMEP ( )#p#
DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- 語言:DB2 SQL 存儲過程
------------------------------------------------------------------------
P1: BEGIN
-- 定義一個全局臨時表SESSION.RESULT
DECLARE GLOBAL TEMPORARY TABLE SESSION.RESULT
(
TMP_HYDM VARCHAR(10), -- 行業代碼
TMP_HYMC VARCHAR(300) -- 行業名稱
)
WITH REPLACE -- 如果存在此臨時表,則替換
NOT LOGGED; -- 不在日志里紀錄
-- 插入數據到臨時表
INSERT INTO SESSION.RESULT
SELECT MLDM,MLMC FROM DM_HY_CY;#p#
P2: BEGIN
-- 游標對客戶機應用程序保持打開
DECLARE CUR_RES CURSOR WITH RETURN FOR
SELECT * FROM SESSION.RESULT;
OPEN CUR_RES;
END P2;
END P1
測試結果:存儲過程執行成功,并返回了插入的目標數據。
測試總結:
1、在SQL語句中,構建臨時表是沒有意義的,因為當SQL語句執行處于自動提交模式下時,執行后就COMMIT了,而一旦執行了COMMIT語句,臨時表將從內存中清除。
2、在SQL過程中,臨時表定義后,如果沒有顯式執行到COMMIT語句,則臨時表一直存在。并且臨時表支持INSERT INTO ... SELECT ... 的語句。
3、在DB2下,臨時表的模式必須為SESSION,SESSION模式下表是一個內存表,這個SESSION是DB2特有的SCHEMA,SESSION對象的聲明周期僅僅限于一次數據連接“會話”,一旦會話結束,SESSION對象就被從內存中清除了,這和JSP中的內置對象SESSION類似。