2010-10-11 149 views
6

如果該表存在但下面的查詢看起來不適用於IBM Db2,則該查詢將刪除一個表。if的語法存在於IBM Db2中

開始原子

如果(存在(

SELECT 1 FROM SYSIBM.SYSTABLES WHERE NAME = 'EMAIL' AND TYPE = 'T' 和Creator = 'schema1' ))然後 放置表EMAIL; end if; 結束

而如果存在語法工作相同,如果我有一個DML語句,而不是表drop語句。任何對此的幫助表示讚賞

更新1:我讀過,你不能在開始原子塊內運行DDL語句,因此我的第一個語句失敗,但第二個罰款。

+0

您是否收到錯誤消息?如果是這樣,你可以發佈嗎? – 2010-10-11 14:56:21

回答

7

我的方式做了如下

Begin atomic 

    if(exists(SELECT 1 
       FROM SYSIBM.SYSTABLES 
       WHERE NAME='EMAIL' AND TYPE='T' AND creator = 'schema1' 
      ) 
    ) 
    then customStoredproc('drop table EMAIL'); 

    end if; 

End 

我customStoredProc只是有一個語句執行即時@dynsql;

1

DB2是正確的,它禁止在原子SQL塊中使用DDL。 IBM已經發布了一個名爲db2perf_quiet_drop的免費附加程序,它可以按照您的要求運行。