Назначение
Создание новой хранимой функции.
Синтаксис
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>]'
Table 1. Параметры оператора CREATE FUNCTION
Параметр |
Описание |
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
.Объявления локальных переменных и именованных курсоров, а также внутренние операторы должны завершаться точкой с запятой (;).