2013-07-04 71 views
0

我如何檢查是否在DB2聲明的全局臨時表在當前會話存在與否?檢查聲明全局臨時表在當前會話中存在

我需要一次創建臨時表的用戶會話,然後能夠將每個報告在我的應用程序的情況下,執行時間插入其行。所以,我需要的時候比第一次更多的是執行報告,從該表中刪除所有的行,然後用新的行重新填充它。

眼下創建臨時表的方法是扔一個42710 SQLSTATE error它執行的第二次。

請問這種說法工作,爲我的實現:DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' SET DGTT_FOUND=1以及如何使用它的Java(executeUpdate()?)

回答

2

根據您的DB2版本,您方便未註明者,你可以聲明臨時表時使用WITH REPLACE選項,這將即使先前已經聲明瞭該表,但不僅會成功,還會處理刪除以前插入的行。

DECLARE GLOBAL TEMPORARY TABLE mytab (
    ... 
) NOT LOGGED WITH REPLACE 
+0

這個完美!謝謝:) – Bernice

+0

這將適用於DB2 LUW和DB2 for i,但不適用於那些使用DB2 z/OS的人。 DB2 z/OS不支持WITH REPLACE,至少從v10開始,但它可能在未來版本中受支持。 – WarrenT

0

因爲聲明的臨時表不是在目錄中定義的,他們只是在當前會話可見(每個會話可以有相同的臨時表名稱的不同定義),您只能嘗試查詢表格並分析答案。

首先,嘗試

select count(0) from session.myTempTable 

如果DB2稱,它不存在,那麼你可以定義一個新表。

如果DB2說它存在,您可以創建它或刪除它,以便重新創建它。我認爲這是你的情況,因爲你有一個SQL狀態42710,那麼你可以爲你的代碼創建一個處理程序。

然而,處理程序可以在SQL過程中使用,所以你應該創建一個SP,您的查詢之前被調用。該SP將檢查該表是否存在,並且當它存在時以及何時不存在時,您將執行想要執行的操作。

參考文獻:

把手 - http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0009025.html

表 - http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.admin.dbobj.doc/doc/r0054491.html