ПОТОК УПРАВЛЕНИЯ


Главная - Примеры разработки 1С - ПОТОК УПРАВЛЕНИЯ
Порядок выполнения запросов и хранимых процедур TSQL может изменяться с помощью определенных операторов (как бы перевести Control-of-Flow Language )
Оператор Описание
BEGIN...END Определяет блок.
BEGIN
{sql_statement|statement_block}
END

GOTO label Безусловный переход к метке label Метки описываются незамысловато:
:label
GOTO label

IF...ELSE Условный оператор. Тоже ничего неожиданного
IF Boolean_expression
{sql_statement|statement_block}
[ELSE [Boolean_expression]
{sql_statement|statement_block}

RETURN Безусловный выход. Синтаксис бесхитростен:
RETURN ([integer_expression])

Жалко только, что возвращаемое значение - это не значение функции, а некий код возврата, причем часть значений зарезервирована под специальные состояния (0 - все нормально):
Код Значение
0 Все нормально
-1 Объект не найден
-2 Ошибка типа данных
-3 Процесс стал жертвой дедлока
-4 Ошибка доступа
-5 Синтаксическая ошибка
-6 "Некоторая" ошибка
-7 Ошибка с ресурсами(н., нет места)
-8 Произошла исправимая внутренняя ошибка
-9 Системный лимит исчерпался
-10 Неисправимое нарушение внутренней целостности
-11 То же самое
-12 Разрушение таблицы или индекса
-13 Разрушение базы данных
-14 Ошибка оборудования
WAITFOR Ожидание определенного события.
WINTFOR {DELAY time |TIME time }

DELAY - определение задержки time, ну а TIME - ожидание до указанного времени. time задается аналогично значениям для datetime
WHILE Цикл с предусловием.
WHILE Boolean_condition
{sql_statement|statement_block}
[BREAK]
{sql_statement|statement_block}
[CONTINUE]

...BREAK Выход из цикла WHILE
...CONTINUE Продолжение цикла WHILE Кроме вышеуказанных операторов могут оказаться полезными при написании запросов и хранимых процедур следующие возможности TSQL:
Возможность Описание
CASE Позволяет выражениям принмать значение в зависимости от условий. Между прочим, CASE является стандартной возможностью ANSI SQL-92
Комментарии Очень даже полезно хотя бы изредка комментировать свой код. Для комметатриев можно использовать две формы - первая, аналогичная комментариям в С:
/*некий глубокомысленный комметарий*/,
и вторая, аналогичная комментариям в Аде:
--Еще один заумный комметарий
Оператор DECLARE Повзоляет объявлять локальные переменные К слову сказать, он может стоять не только в начале процедуры или batch а, но и где угодно в их теле. Удобно объявлять переменные там, где они используются, а не тремястами строками выше. Впрочем, на мой взгляд, злоупотреблять этим тоже не стоит...
Оператор PRINT Выдает заданное значение на экран.
Оператор RAISERROR Устанавливает ошибочное состояние
Пример

DECLARE @Name varchar(40)
DECLARE CT CURSOR FOR SELECT Name from Peoples
OPEN CT
WHILE 1=1 BEGIN
FETCH FROM CT INTO @Name
/*Так, на мой взгляд, удобнее обходиться с курсорами*/
IF @@fetch_status=-1
BREAK
IF @@fetch_status=-2
CONTINUE
PRINT @Name
END
DEALLOCATE CT