2. Расширения SQL.

Транзакции. Вместо begin transaction следует всегда использовать tbegin. Потом можно будет легко перевести систему на distributed transaction

tbegin=begin transaction

tcommit=commit transaction

trollback=rollback transaction

loop. Бесконечный цикл. Используется

loop оператор1...операторn end

FORALL...ENDFOR. Два макроса реализуют цикл по записям с помощью курсора. Использование:

FORALL{имя_курсора; список_into; select_оператор}

ENDFOR{имя_курсора; список_into}

Первые два параметра у FORALL и ENDFOR должны совпадать. При аварийном выходе из цикла надо не забыть сделать deallocate. Например

decalre @i int, @b varchar(128)

FORALL{{Cu}, {@i,@b}, {select x,y from Z where k='23'})

..... тело цикла

ENDFOR({Cu}, {@i,@b})

rollerror. Используется при выходе по ошибке, когда надо завершить транзакцию по rollback.

Но чтобы не было предупреждения о счетчиках транзакций процедур, то на всех уровнях вложенности, кроме последнего, делается commit, а на последнем rollback. После вызова этого макроса следует выходить с помощью return 1 - по статусу определяется неуспешное завершение функции

rerror({строка_сообщения}) – выдает с помощью raiseerror сообщение об ошибке

rerrorp({строка_сообщения},{параметры}) – то же, но с параметрами например:

rerror({'Not found'})

rerrorp({'Not found %d in %s'}, {@a, @b})