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

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

Ответить
ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

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

Добрый день,
подскажите пожалуйста - как обработать результат выполнения EXECUTE STATEMENT в случае, если что то пошло не так (к примеру генерированный код оказался с ошибкой или т.п.). И буду очень признателен за пример реализации! Отлавливать сам код ошибки не нужно, задача в том, что бы узнать - успешно выполнился EXECUTE STATEMENT или был CRASH.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

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

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

Вопрос не понят. Если будет исключение, то сервер тебя об этом обязательно сообщит, молчать не будет.
Или вопрос в том, как его поймать? Тогда - как обычно, when...

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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
    }

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

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

см. обработку ошибок по WHEN. Но вообще, конечно, жуть.

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

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

Благодарю, разобрался:

Код: Выделить всё

WHEN ANY DO EXIT; /* и т.п. */
Помогло, большое спасибо! :wink:

P.S. Жуть не то слово, ...это для двух процедур генерируют строку формата JSON на основании результатов выполнения другой процедуры или таблицы. Местами нужно бывает.

AntonBorisov399
Сообщения: 1
Зарегистрирован: 14 июл 2010, 15:57

crm система

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

Поддерживаю предыдущий ответ!

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

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

Спасибо, работает как часы :)

Ответить