Интернет, компьютеры, софт и прочий Hi-Tech | ||
Избранные докиМетки (все метки)hi tech, internet, it, интернет, информационные технологии, ит, по, программное обеспечение, сайт, софт
Подписаться через RSS2Email.ru
Дополнительнооптимизация, сайт, мониторы, движок, Битрикс, хостинг, сайты, мобильные, электроника, видеокарта |
Оператор IF в стандарте SQL:2003Заметил, что на моем сайте довольно часто ищут информацию по оператору IF в языке структурированных запросов SQL. Чтобы эти поиски приводили к успеху, решил подробно осветить этот вопрос. Оператор IF был введен в стандарт SQL в 2003 году и описан в спецификации "(ISO-ANSI Working Draft) Persistent Stored Modules (SQL/PSM)" (Август, 2003), которая и является основным источником этой статьи. Согласно стандарту SQL/PSM условный оператор IF имеет следующий синтаксис: IF <логическое выражение 1>
THEN <последовательность запросов SQL 1>
[ ELSEIF <логическое выражение 2> THEN <последовательность запросов SQL 2>... ]
[ ELSE <последовательность запросов SQL 3> ]
END IF
Квадратные скобки в этом определении означают, что их содержимое может быть опущено. Конструкция "ELSEIF" может повторяться многократно. Она позволяет указывать альтернативные логические выражения. Условный оператор IF работает следующим образом:
Следует заметить, что если в запросе есть конструкция ELSEIF, то от нее можно отказаться с помощью следующей рекурсивной трансформации запроса: IF <логическое выражение 1>
THEN <последовательность запросов SQL 1>
ELSEIF <логическое выражение 2>
THEN <последовательность запросов SQL 2>
[ ELSEIF <логическое выражение 3> THEN <последовательность запросов SQL 3>... ]
[ ELSE <последовательность запросов SQL 4> ]
END IF
Полностью эквивалентно следующему: IF <логическое выражение 1>
THEN <последовательность запросов SQL 1>
ELSE
IF <логическое выражение 2>
THEN <последовательность запросов SQL 2>
[ ELSEIF <логическое выражение 3> THEN <последовательность запросов SQL 3>... ]
[ ELSE <последовательность запросов SQL 4> ]
END IF
END IF
Последовательно используя эту трансформацию можно избавиться от всех конструкций вида "ELSEIF". Хотя вряд ли это может быть целесообразно в реальных приложениях. В заключение приведем тривиальный, но полностью рабочий пример из PL/pgSQL, демонстрирующий работу оператора IF. Создаем функцию: CREATE OR REPLACE FUNCTION my_function(my_var integer) RETURNS varchar AS $$
BEGIN
IF my_var > 200 THEN
RETURN 'Больше 200';
ELSEIF my_var > 100 THEN
RETURN 'Больше 100, меньше или равно 200';
ELSE
RETURN 'Меньше или равно 100';
END IF;
END
$$ LANGUAGE plpgsql;
Проверяем ее работу: SELECT my_function(50); SELECT my_function(150); SELECT my_function (250); Впрочем, необходимо оговориться, что PostgreSQL не поддерживает стандарт SQL/PSM и хотя PL/pgSQL очень похож на SQL/PSM, но не полностью ему соответствует. Автор: Дмитрий Скоробогатов, 11.11.2010 Предыдущие публикации:
Последнее редактирование: 2011-01-19 08:54:45 Метки материала: if, sql, оператор if, sql:2003, программирование, база данных, язык программирования, db Оставьте, пожалуйста, свой комментарий к публикации |
|
© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.