CREATE FUNCTION
Создание новой хранимой функции.
DSQL
CREATE FUNCTION funcname [(<inparam> [, <inparam> ...])] RETURNS <type> [NOT NULL] [COLLATE collation] [DETERMINISTIC] <routine-body> <inparam> ::= <param_decl> [{= | DEFAULT} <value>] <value> ::= {<literal> | NULL | <context_var>} <param_decl> ::= paramname <type> [NOT NULL] [COLLATE collation] <type> ::= <datatype> | [TYPE OF] domain | TYPE OF COLUMN rel.col <datatype> ::= <scalar_datatype> | <blob_datatype> <scalar_datatype> ::= См. Синтаксис скалярных типов данных <blob_datatype> ::= См. Синтаксис типа данных BLOB <routine-body> ::= <psql-routine-spec> | <external-routine-spec> <psql-routine-spec> ::= [<rights-clause>] <psql-routine-body> <rights-clause> ::= SQL SECURITY {DEFINER | INVOKER} <psql-routine-body> ::= См. Синтаксис тела модуля <external-routine-spec> ::= <external-routine-reference> [AS <extbody>] <external-routine-reference> ::= EXTERNAL NAME <extname> ENGINE <engine> <extname> ::= '<module-name>!<routine-name>[!<misc-info>]'
Параметр | Описание |
---|---|
funcname |
Имя хранимой функции.Может содержать до 63 символов. |
inparam |
Описание входного параметра. |
literal |
Литерал, совместимый по типу с параметром. |
context_var |
Любая контекстная переменная, тип которой совместим с типом параметра. |
paramname |
Имя входного параметра функции.Может содержать до 63 символов.Имя параметра должно быть уникальным среди входных параметров функции, а также её локальных переменных. |
module-name |
Имя внешнего модуля, в котором расположена функция. |
routine-name |
Внутреннее имя функции внутри внешнего модуля. |
misc-info |
Определяемая пользователем информация для передачи в функцию внешнего модуля. |
extbody |
Тело внешней функции. Строковый литерал который можетиспользоваться UDR для различных целей. |
engine |
Имя движка для использования внешних функций.Обычно указывается имя UDR. |
datatype |
Тип данных SQL. |
collation |
Порядок сортировки. |
domain_name |
Имя домена. |
rel |
Имя таблицы или представления. |
col |
Имя столбца таблицы или представления. |
Оператор CREATE FUNCTION
создаёт новую хранимую функцию.Имя хранимой функции должно быть уникальным среди имён всех хранимых функций и внешних (UDF) функций.Если только это не внутренняя функция (“подпрограмма”). Для внутренних функций достаточно уникальности только в рамках модулей, которые их “охватывают”.
Note
|
Желательно также, чтобы имя хранимой функции было уникальным и среди имён функций расположенных в PSQL пакетах (package), хотя это и допустимо.Дело в том, что в настоящее время вы не сможете вызвать функцию/процедуру из глобального пространства имён внутри пакета, если в пакете объявлена одноименная функция/процедура.В этом случае всегда будет вызвана процедура/функция пакета. |
CREATE FUNCTION
является составным оператором, состоящий из заголовка и тела.Заголовок определяет имя хранимой функции, объявляет входные параметры и тип возвращаемого значения.
Тело функции состоит из необязательных объявлений локальных переменных, подпрограмм и именованных курсоров, и одного или нескольких операторов, или блоков операторов, заключённых во внешнем блоке, который начинается с ключевого слова BEGIN
, и завершается ключевым словом END
.Объявления локальных переменных и именованных курсоров, а также внутренние операторы должны завершаться точкой с запятой (;).