Синтаксис if существует в IBM Db2 - PullRequest
6 голосов
/ 11 октября 2010

Следующий запрос удаляет таблицу, если таблица существует, но, похоже, она не работает для IBM Db2.

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 вместо оператора удаления таблицы,Приветствуется любая помощь по этому вопросу.

Обновление 1: я прочитал, что вы не можете запустить оператор DDL в начальном атомарном блоке, поэтому мой первый оператор завершается ошибкой, но второй идет нормально.

Ответы [ 2 ]

9 голосов
/ 20 октября 2010

То, как я это сделал, выглядит следующим образом

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, немедленный @dynsql;

1 голос
/ 20 октября 2010

Вы правы, что DB2 запрещает DDL внутри атомарного блока SQL.IBM выпустила бесплатную дополнительную процедуру db2perf_quiet_drop, которая работает так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...