
- •Введение
- •Прочие команды
- •Структура базы данных
- •Ключи, ограничения
- •Индексы
- •Представления
- •Процедуры и функции
- •Триггеры
- •Пользователи и сессии
- •Инструментарий скачать субд
- •Инсталляция
- •Выполнение запросов
- •Использование примеров
- •Комментарий
- •Идентификаторы
- •Обзор типов данных
- •Интервал времени
- •Литералы
- •Выражения и операции
- •Строковые операции
- •Алгебраические операции
- •Операции отношения
- •Логические операции и предикаты
- •Условные выражения
- •Прочие операции
- •Обзор функций
- •Математические функции
- •Строковые функции
- •Работа с датами
- •Преобразование типов
- •Функции Oracle
- •Функции PostgreSql
- •Функции MySql
- •Создание таблицы
- •Значения полей по умолчанию
- •Ключи и ограничения
- •Настройка внешнего ключа
- •Создание по выборке
- •Дополнительные параметры таблицы
- •Изменение, удаление таблицы
- •Переименование таблицы или ее столбца
- •Добавление/удаление столбца
- •Первичный ключ
- •Уникальный ключ
- •Внешний ключ
- •Безошибочное удаление таблиц
- •Добавление записей
- •Значения по умолчанию
- •Подзапросы
- •Вставка по условию
- •Обновление записей
- •Обновление подзапросом
- •Обновление по данным другой таблицы
- •Удаление записей
- •Выборка записей
- •Выборка констант
- •Выборка по столбцам таблиц
- •Синонимы (алиасы)
- •Уникальные записи
- •Выборка по условию
- •Выборка по группам
- •Соединения
- •Агрегатные функции, группировка данных
- •Операции над выборками
- •Добавление итогов
- •Нумерация записей
- •Обеспечение уникальности первичного ключа
- •Столбцы с автоинкрементом
- •Индексы
- •Представления
- •Динамический sql (dsql)
- •Процедурные операторы блоковая структура кода
- •Присвоение
- •Условный оператор
- •Оператор выбора
- •Безусловный цикл
- •Цикл с предусловием
- •Цикл по счетчику
- •Цикл по элементам
- •Операторы выхода/продолжения итерации
- •Выборка в переменные
- •Хранимые процедуры
- •Вызов процедур
- •Исключения
- •Курсоры
- •Триггеры
- •Числа прописью
- •Транзакции, конкурирующие запросы
- •Управление аккаунтами пользователи
- •Права доступа
- •Права доступа MySql
- •Права доступа PostgreSql
- •Права доступа Oracle
- •Удаление прав доступа
- •Роли PostgreSql
- •Роли Oracle
- •Роли MySql
- •Файловый вывод/ввод
- •Информация о базе данных
Процедурные операторы блоковая структура кода
Процедурный язык имеет блоковую структуру. Группировка команд производится операторами BEGIN END. Вложенные блоки разрешаются. Oracle позволяет независимый блок, у остальных внешний блок должен быть в составе функции или т.п. Оператор DECLARE позволяет объявить локальные переменные блока. По умолчанию переменные инициализируются в null. Для удобства в Oracle и PostgreSQL можно использовать два псевдотипаtype и rowtype. Первый определяет тип переменной такой же как у столбца указанной таблицы. Второй определяет тип переменной как структуру соответствующую записи указанной таблицы.
-- Oracle, PostgreSQL
DECLARE
i integer:=3;
t tblname.id%type;
trow tblname%rowtype;
BEGIN
...
END;
-- MySQL
BEGIN
-- локальная переменная
DECLARE o integer DEFAULT 3;
DECLARE i double precision DEFAULT 3.14;
...
END;
Присвоение
Для присвоения значения переменной используется операция :=. В MySQL присвоение должно происходить в операторе SET (по стандарту).
-- Oracle, PostgreSQL
i:=23;
-- MySQL
SET i:=23;
SET i=23;
Условный оператор
Условный оператор IF позволяет выполнить ряд команд, если указанное условие истинно. Внутри него может быть сколько угодно не обязательных алтернативных условий ELSE IF, и одного необязательного слова ELSE, определяющего что делать, если ни одно условие не выполнено.
-- Oracle
IF i >3 THEN
delete from tblname where id>40;
ELSIF i=-4 then -- альтернативное условие
delete from tblname where id=4;
ELSE
delete from tblname ;
END if;
-- MySQL
IF i >3 THEN
delete from tblname where id>40;
ELSEIF i=-4 then -- альтернативное условие
delete from tblname where id=4;
ELSE
delete from tblname ;
END IF;
-- в PostgreSQL ELSEIF синоним ELSIF,
-- так что оба приведенных выше примера верны
Оператор выбора
В первом синтаксисе оператор выбора CASE позволяет выполнить тот или иной код в зависимости от значения указанного выражения. Во втором синтаксисе конструкция CASE аналогична условному оператору. Обратите внимание, что в отличие от CASE, используемого в обычных командах SQL, этот оператор завершается словами END CASE, а не просто END. Данный оператор не поддерживается в PostgreSQL.
-- Oracle
CASE i
WHEN 2 THEN i:=4;
WHEN 5 THEN i:=0;
ELSE i:=5;
END CASE;
-- MySQL
CASE i
WHEN 2 THEN
set i:=4;
WHEN 5 THEN
set i:=0;
ELSE
set i:=5;
END CASE;
метки
Метки полезны, когда есть вложенные циклы и нужно выйти из внешнего внутри вложенного. Фактически они именует блок или цикл. А в MySQL они обязательны для операторов выхода из цикла и продолжения итерации.
-- Oracle, PostgreSQL
<<l1>>
-- MySQL
l1:
Безусловный цикл
Безусловный цикл определяется оператором LOOP. Другими словами условие выхода указывается явно внутри тела цикла.
-- Oracle, PostgreSQL
-- оператор выхода EXIT
-- без метки
LOOP
i:=i+1;
EXIT WHEN i>11;
END LOOP;
-- Oracle, PostgreSQL
-- с меткой
<<l1>>LOOP
i:=i+1;
EXIT l1 WHEN i>11;
END LOOP l1;
-- MySQL
-- оператор выхода LEAVE
l1: LOOP
set i:=i+1;
if i>11 then
LEAVE l1;
end if;
END LOOP l1;