Обработать ошибку выполнения EXECUTE STATEMENT

Модераторы: kdv, CyberMax

Обработать ошибку выполнения EXECUTE STATEMENT

Сообщение ERrorMAKros » 09 июл 2010, 14:36

Добрый день,
подскажите пожалуйста - как обработать результат выполнения EXECUTE STATEMENT в случае, если что то пошло не так (к примеру генерированный код оказался с ошибкой или т.п.). И буду очень признателен за пример реализации! Отлавливать сам код ошибки не нужно, задача в том, что бы узнать - успешно выполнился EXECUTE STATEMENT или был CRASH.
ERrorMAKros
 
Сообщения: 37
Зарегистрирован: 18 янв 2007, 02:05

Re: Обработать ошибку выполнения EXECUTE STATEMENT

Сообщение WildSery » 09 июл 2010, 14:50

Вопрос не понят. Если будет исключение, то сервер тебя об этом обязательно сообщит, молчать не будет.
Или вопрос в том, как его поймать? Тогда - как обычно, when...
WildSery
Заслуженный разработчик
 
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19
Откуда: Москва

Re: Обработать ошибку выполнения EXECUTE STATEMENT

Сообщение ERrorMAKros » 09 июл 2010, 17:02

Объяснюсь чуть подробней, штука вот какая (к примеру):
Код: Выделить всё
create procedure sample
returns (someData integer)
as declare variable Query varchar(100);
   declare variable FirstResult Integer;
   declare variable QueryNext varchar(100);
   declare variable NextResult Integer;
begin
Query='select id from имя_не_существующей_таблицы';
EXECUTE STATEMENT Query into :FirstResult;
/* тут мы получаем ошибку
Undefined name. Dynamic SQL Error.
SQL error code = бла-бла-бла.
*/

QueryNext='select data from NextTable where id=' || :FirstResult;
for EXECUTE STATEMENT QueryNext into :NextResult
do begin
     someData=someData+1521;
     suspend;
    end;
end


Естественно выполнять код в QueryNext уже не имеет смысла, потому как выполнение Query завершилось полнейшим крахом! Так вот, как отловить ошибку при выполнении EXECUTE STATEMENT Query into :FirstResult;, что бы я мог (к примеру) в условии IF решать - подготавливать ли мне выполнение QueryNext или же аварийно завершить всю процедуру целиком передав в returns (someData integer) какой нибудь null. В FB v2.1 Есть какой нибудь аналог вот этого:
Код: Выделить всё
try{
  //Run some code here
    }
catch(err){
  //Handle errors here
    }
ERrorMAKros
 
Сообщения: 37
Зарегистрирован: 18 янв 2007, 02:05

Re: Обработать ошибку выполнения EXECUTE STATEMENT

Сообщение kdv » 10 июл 2010, 10:42

см. обработку ошибок по WHEN. Но вообще, конечно, жуть.
kdv
Forum Admin
 
Сообщения: 6032
Зарегистрирован: 25 окт 2004, 18:07

Re: Обработать ошибку выполнения EXECUTE STATEMENT

Сообщение ERrorMAKros » 10 июл 2010, 15:16

Благодарю, разобрался:
Код: Выделить всё
WHEN ANY DO EXIT; /* и т.п. */


Помогло, большое спасибо! :wink:

P.S. Жуть не то слово, ...это для двух процедур генерируют строку формата JSON на основании результатов выполнения другой процедуры или таблицы. Местами нужно бывает.
ERrorMAKros
 
Сообщения: 37
Зарегистрирован: 18 янв 2007, 02:05

crm система

Сообщение AntonBorisov399 » 14 июл 2010, 21:10

Поддерживаю предыдущий ответ!
AntonBorisov399
 
Сообщения: 1
Зарегистрирован: 14 июл 2010, 15:57

Re: Обработать ошибку выполнения EXECUTE STATEMENT

Сообщение ERrorMAKros » 14 июл 2010, 23:06

Спасибо, работает как часы :)
ERrorMAKros
 
Сообщения: 37
Зарегистрирован: 18 янв 2007, 02:05


Вернуться в Проектирование БД и запросов



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1