Syntax IBM Db2中存在if的语法

Syntax IBM Db2中存在if的语法,syntax,db2,if-statement,Syntax,Db2,If Statement,如果某个表存在,但它似乎不适用于IBM Db2,则follow查询会删除该表 Begin atomic if( exists( SELECT 1 FROM SYSIBM.SYSTABLES WHERE NAME='EMAIL' AND TYPE='T' AND creator = 'schema1' )) then drop table EMAIL; end if; End 然而,如果我使用DML语句而不是table drop语句,那么相同的if exists语法

如果某个表存在,但它似乎不适用于IBM Db2,则follow查询会删除该表

Begin atomic

if( exists(

SELECT 1 FROM SYSIBM.SYSTABLES 
            WHERE NAME='EMAIL' AND TYPE='T' AND creator = 'schema1'
)) then
drop table EMAIL;
end if;
End
然而,如果我使用DML语句而不是table drop语句,那么相同的if exists语法也可以工作。在此方面的任何帮助都将不胜感激


更新1:我了解到您不能在begin原子块内运行DDL语句,因此我的第一条语句失败,但第二条语句运行正常

DB2禁止在原子SQL块中使用DDL是正确的。IBM发布了一个名为db2perf\u quiet\u drop的免费附加程序,它可以按照您想要的方式工作。

我这样做的方式如下

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只有一个stmt execute immediate@dynsql

您是否收到错误消息?如果是的话,你能贴出来吗?