Пользовательские функции

Материал из AOW

Перейти к: навигация, поиск

PostgreSQL представляет функции четырех видов:

  • SQL-функции
  • Функции процедурных языков (PL/pgSQL, PL/SQL (Oracle), PL/Tcl, PL/Perl, PL/Python, PL/Php)
  • Встроенные функции
  • Функции на языке C

Общий синтаксис объявления пользовательских функций:

 CREATE [ OR REPLACE ] FUNCTION
   name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } defexpr ] [, ...] ] )
   [ RETURNS rettype
     | RETURNS TABLE ( colname coltype [, ...] ) ]
 { LANGUAGE langname
   | WINDOW
   | IMMUTABLE | STABLE | VOLATILE
   | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
   | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
   | COST execution_cost
   | ROWS result_rows
   | SET configuration_parameter { TO value | = value | FROM CURRENT }
   | AS 'definition'
   | AS 'obj_file', 'link_symbol'
 } ...
   [ WITH ( attribute [, ...] ) ]

Синтаксис OR REPLACE следует использовать, если нужно переопределить функцию.

Параметры:

  • name – имя функции
  • argmode – режим работы с аргументами: IN, OUT, INOUT, или VARIADIC
  • argname – имя аргумента для языков, которые обращаются в теле функции к аргументу по имени
  • argtype – тип аргумента…
  • defexpr – выражения значения по умолчанию для аргументов в режиме IN, INOUT, которые должны иметь тот же тип, что и аргумент
  • rettype – тип возвращаемых данных… в случае присутствия OUT или INOUT этот пункт можно опустить. Модификатор SETOF указывает, что функция возвращает набор элементов, а не единственное значение.
  • colname – имя возвращаемого столбца в RETURNS TABLE ветке синтаксиса. Еще один эффективный способ задания именованного OUT параметра, также подразумевает RETURNS SETOF.
  • coltype – тип возвращаемого столбца в RETURNS TABLE ветке синтаксиса
  • langname – название языка, на котором реализована функция. Может принимать значения: SQL, C, internal, или имя процедурного языка
  • result_rows – предположительное число возвращаемых строк для планировщика. По умолчанию 1000
  • definition – тело функции одной строкой, также может быть именем внутренней функции, путем к файлу или объекту или командой SQL

IMMUTABLE | STABLE | VOLATILE – указывают на поведение функции.

CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT – управляет необходимостью вызова функции в случае передачи NULL значений

Пример:

Функция на SQL-языке, принимающая единственный целочисленный параметр, возвращающая одиночный результат текстового типа, представленная SQL-командой, не изменяющая содержимое базы данных во время выполнения.

 CREATE FUNCTION content_get_tags(id integer) RETURNS text
   AS $_$
 select rtrim(sum(tags || ';'),';') as taglist from
 (
   select 
    tc.name||':'||rtrim(sum(t.value||','),',') as tags
   from 
    news.content_tags_tb c2t,
    tags.content_tb t,
    tags.category_tb tc
   where
   c2t.idcontent = $1
   and t.id = c2t.idtag
   and tc.id = t.idcategory
   group by
   tc.name
 ) tags
 $_$
   LANGUAGE sql IMMUTABLE;


См.также

Личные инструменты

Разработка веб-сайтов, автоматизация.
По всем вопросам обращайтесь по телефонам:

+7 495 640 29 90
http://artofweb.ru