2010-10-11 85 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的免费附加程序,它可以按照您的要求运行。