В документе PostgreSQL команды для создания функции PL / pgSQL и для функции SQL кажутся очень похожими, но с различиями:
Функции, написанные на PL / pgSQL, определяются сервером путем выполнения
СОЗДАТЬ ФУНКЦИОНАЛЬНЫЕ КОМАНДЫ. Такая команда обычно выглядит так:
говорят,
CREATE FUNCTION somefunc(integer, text) RETURNS integer
AS 'function body text'
LANGUAGE plpgsql;
Тело функции - это просто строковый литерал, поскольку CREATE
ФУНКЦИЯ обеспокоена. Часто полезно использовать котировки доллара (см.
Раздел 4.1.2.4) написать тело функции, а не нормальное
синтаксис одинарной кавычки. Без котировки доллара, любые одинарные кавычки или
Обратные слеши в теле функции должны быть исключены путем удвоения их.
Почти все примеры в этой главе используют литералы в кавычках для
их функции тела. PL / pgSQL - это блочно-структурированный язык.
полный текст тела функции должен быть блоком. Блок определен
как:
[ <<label>> ]
[ DECLARE
declarations ]
BEGIN
statements
END [ label ];
В списке команд SQL:
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT |
= } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM
CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
[ WITH ( attribute [, ...] ) ]
Например, мы можем указать язык
Это действительно две разные команды? Или это одна и та же команда?
Спасибо.