Spec-Zone .ru
спецификации, руководства, описания, API

D.1. Ограничения на Сохраненные Программы

Эти ограничения применяются к функциям, описанным в Главе 18, Сохраненных Программах и Представлениях.

Некоторые из ограничений, отмеченных здесь, применяются ко всем сохраненным подпрограммам; то есть, и к хранимым процедурам и к сохраненным функциям. Есть также некоторые ограничения, определенные для сохраненных функций, но не для хранимых процедур.

Ограничения для сохраненных функций также применяются к триггерам. Есть также некоторые ограничения, определенные для триггеров.

Ограничения для хранимых процедур также применяются к DO пункт определений события Event Scheduler. Есть также некоторые ограничения, определенные для событий.

SQL-операторы, Не Разрешенные в Сохраненных Подпрограммах

Сохраненные подпрограммы не могут содержать произвольные SQL-операторы. Следующие операторы не разрешаются:

Ограничения для Сохраненных Функций

Следующие дополнительные операторы или операции не разрешаются в пределах сохраненных функций. Им разрешают в пределах хранимых процедур, кроме хранимых процедур, которые вызываются изнутри сохраненной функции или триггера. Например, если Вы используете FLUSH в хранимой процедуре ту хранимую процедуру нельзя вызвать от сохраненной функции или триггера.

Ограничения для Триггеров

Для триггеров применяются следующие дополнительные ограничения:

Конфликты имен в пределах Сохраненных Подпрограмм

Тот же самый идентификатор мог бы использоваться для стандартного параметра, локальной переменной, и столбца таблицы. Кроме того, то же самое имя локальной переменной может использоваться во вложенных блоках. Например:

CREATE PROCEDURE p (i INT)BEGIN  DECLARE i INT DEFAULT 0;  SELECT i FROM t;  BEGIN    DECLARE i INT DEFAULT 1;    SELECT i FROM t;  END;END;

В таких случаях идентификатор неоднозначен, и следующие правила приоритета применяются:

Поведение, что переменные имеют приоритет по столбцам таблицы, нестандартно.

Соображения репликации

Использование сохраненных подпрограмм может вызвать проблемы репликации. Эта проблема обсуждается далее в Разделе 18.7, "Двоичное Журналирование Сохраненных Программ".

--replicate-wild-do-table=db_name.tbl_name опция применяется к таблицам, представлениям, и триггерам. Это не применяется к хранимым процедурам и функциям, или событиям. Чтобы фильтровать операторы, работающие на последних объектах, используйте один или больше --replicate-*-db опции.

Отладка Соображений

Нет никаких сохраненных стандартных средств отладки.

Неподдерживаемый Синтаксис от Стандарта SQL:2003

MySQL сохраненный стандартный синтаксис основан на стандарте SQL:2003. Следующие элементы от того стандарта в настоящий момент не поддерживаются:

Соображения параллелизма

Чтобы предотвратить проблемы взаимодействия между сеансами, когда клиент делает заявление, сервер использует снимок подпрограмм и инициировал доступный для выполнения оператора. Таким образом, сервер вычисляет список процедур, функции, и триггеры, которые могут использоваться во время выполнения оператора, загружают их, и затем продолжаются, чтобы выполнить оператор. В то время как оператор выполняется, он не видит изменений к подпрограммам, выполняемым другими сеансами.

Для максимального параллелизма сохраненные функции должны минимизировать свои побочные эффекты; в частности обновление таблицы в пределах сохраненной функции может уменьшить параллельные операции на той таблице. Сохраненная функция получает блокировки таблицы перед выполнением, чтобы избежать несогласованности в двоичном журнале из-за несоответствия порядка, в котором выполняются операторы и когда они появляются в журнале. Когда основанное на операторе двоичное журналирование используется, операторы, которые вызывают функцию, записываются, а не операторы, выполняемые в пределах функции. Следовательно, сохраненные функции, которые обновляют те же самые базовые таблицы, не выполняются параллельно. Напротив, хранимые процедуры не получают блокировки на уровне таблицы. Все операторы, выполняемые в пределах хранимых процедур, пишутся двоичному журналу, даже для основанного на операторе двоичного журналирования. См. Раздел 18.7, "Двоичное Журналирование Сохраненных Программ".

Ограничения Планировщика события

Следующие ограничения являются определенными для Планировщика События: