Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
create_procedure [2009/08/05 11:16] afgm Форматирование раздела "Формат" |
create_procedure [2009/08/05 10:26] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== CREATE PROCEDURE ====== | ||
+ | |||
+ | |||
+ | |||
+ | ===== Версии сервера ===== | ||
+ | ^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.0.3 ^ 2.0.4 ^ 2.1 ^ 2.5 ^ 3.0 ^ | ||
+ | | ? | ? | + | + | + | + | + | + | + | + | + | | ||
+ | |||
+ | ===== Формат ===== | ||
+ | <code> | ||
+ | CREATE [OR ALTER] PROCEDURE <имя хранимой процедуры> | ||
+ | [(<список входных параметров>)] | ||
+ | [RETURNS (<список выходных параметров>)] | ||
+ | AS | ||
+ | [<список объявления переменных>] | ||
+ | BEGIN <блок операторов> END; | ||
+ | |||
+ | <список входных параметров> ::= | ||
+ | (<описание параметра> [= <значение по умолчанию>] | ||
+ | [, <описание параметра> [= <значение по умолчанию>]]...) | ||
+ | |||
+ | <список выходных параметров> ::= (<описание параметра> | ||
+ | [, <описание параметра>]...) | ||
+ | |||
+ | <описание параметра> ::= <имя параметра> | ||
+ | { <тип данных> | ||
+ | | <имя домена> | ||
+ | | TYPE OF <имя домена> | ||
+ | } [COLLATE <порядок сортировки>] | ||
+ | |||
+ | <список объявления переменных> ::= | ||
+ | <объявление локальной переменной> | ||
+ | [<объявление локальной переменной>] ... | ||
+ | |||
+ | <объявление локальной переменной> ::= | ||
+ | DECLARE [VARIABLE] | ||
+ | { <имя локальной переменной> | ||
+ | { <тип данных> | ||
+ | | <имя домена> | ||
+ | | TYPE OF <имя домена> | ||
+ | } [COLLATE <порядок сортировки>] | ||
+ | | <имя курсора> CURSOR FOR (<оператор SELECT>) | ||
+ | }; | ||
+ | </code> | ||
+ | |||
+ | ===== Описание ===== | ||
+ | Оператор CREATE OR ALTER PROCEDURE позволяет создать новую хранимую процедуру, если процедура с тем же именем отсутствует в базе данных. Если такая процедура уже существует, то происходит ее замена на новую. | ||
+ | |||
+ | Хранимую процедуру может создать любой пользователь, соединившийся с базой данных. | ||
+ | |||
+ | Имя хранимой процедуры может содержать до 31 символа и должно быть уникальным среди имен хранимых процедур базы данных, таблиц и представлений. | ||
+ | |||
+ | Хранимой процедуре от вызвавшей программы могут передаваться входные параметры. Параметры передаются по значению, то есть любые изменения значений входных параметров никак не влияют на значения этих параметров в вызвавшей программе. Входным параметрам может присваиваться значение по умолчанию. Параметры, для которых заданы значения по умолчанию, должны располагаться в самом конце списка. Если входной параметр основан на домене, которому также задано значение по умолчанию в предложении DEFAULT, то новое значение по умолчанию перекрывает указанное при описании домена. | ||
+ | |||
+ | Хранимая процедура может возвращать вызвавшей программе произвольное количество выходных параметров.\\ | ||
+ | Если при описании параметра, локальной переменной процедуры указано имя домена, то для него копируются все характеристики этого домена. Если в описании присутствует предложение TYPE OF, то для переменной копируется только тип данных домена. | ||
+ | |||
+ | В теле хранимой процедуры может быть описано произвольное количество локальных переменных.\\ | ||
+ | После описания локальных переменных в теле хранимой процедуры следует блок операторов, заключенных в операторные скобки BEGIN и END. | ||
+ | |||
+ | :!: Вместо CREATE OR ALTER PROCEDURE можно использовать RECREATE PROCEDURE. | ||
+ | |||
+ | ===== Пример ===== | ||
+ | <code sql> | ||
+ | RECREATE PROCEDURE SUMM ( | ||
+ | A INTEGER, | ||
+ | B INTEGER | ||
+ | ) | ||
+ | RETURNS(C INTEGER) | ||
+ | AS | ||
+ | BEGIN | ||
+ | c = a + b; | ||
+ | SUSPEND; | ||
+ | END | ||
+ | </code> | ||
+ | |||
+ | Процедура возвращает сумму двух чисел - a и b. Оператор SUSPEND служит для приостановки выполнения программы и выдачи результата. | ||
+ | ===== См. также ===== | ||
+ | [[DROP PROCEDURE]], [[EXECUTE PROCEDURE]], [[SELECT]], [[DECLARE VARIABLE]]. | ||