В PostgreSQL имеют ли PL / pgSQL и SQL разные команды CREATE FUNCTION? - PullRequest
0 голосов
/ 28 июня 2018

В документе 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 [, ...] ) ]

Например, мы можем указать язык

  • на LANGUAGE ... в конце команды PL / pgSQL и

  • по LANGUAGE lang_name в команде SQL.

Это действительно две разные команды? Или это одна и та же команда?

Спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

Приведенное определение CREATE FUNCTION является общим для всех языков:

lang_name

Название языка, на котором реализована функция. Это может быть sql, c, внутренний или имя пользовательского процедурного языка, например, plpgsql.

...