PL/pgSQL

PL/pgSQL

PL/pgSQL (Procedural Language/PostGres Structured Query Language — процедурное расширение языка СУБД

Содержание

Преимущества использования

Стандартный SQL используется в PostgreSQL и других реляционных БД как основной язык для создания запросов. Он переносим и прост, как для изучения, так и для использования. Однако слабое его место — в том, что каждая конструкция языка выполняется сервером отдельно. Это значит, что клиентское приложение должно отправлять каждый запрос серверу, получить его результат, определенным образом согласно логике приложения обработать его, посылать следующий запрос и т. д. В случае, если клиент и сервер БД расположены на разных машинах, это может привести к нежелательному увеличению задержек и объема пересылаемых от клиента серверу и наоборот данных.

При использовании PL/pgSQL все становится проще. Появляется возможность сгруппировать запросы и вычислительные блоки в единую конструкцию, которая будет размещаться и выполняться на сервере, а клиент будет получать отправлять запрос на её выполнение и получать результат, минуя все промежуточные пересылки данных взад—вперед, что в большинстве случаев очень позитивно сказывается на производительности.

Поддерживаемые типы аргумента и возвращаемого значения

Функции, написанные на PL/pgSQL, могут принимать в качестве аргумента и возвращать как результат значения любого скалярного или составного типа, допустимые для сервера БД, включая определенные пользователем, строковые типы и записи.

Допускается также аргументы и возвращаемые значения, относящиеся к псевдотипам anyelement, anyarray, anynonarray и anyenum. Благодаря этому появляется возможность определять полиморфные функции, принимаемый и возвращаемый которыми тип может изменяться от вызова к вызову. Функции на PL/pgSQL могут возвращать не одно значение, а целый набор значений, либо вообще не возвращать никакого значения (применяя тип void).

Структура кода на PL/pgSQL

Любая программная конструкция (функция, триггер или правило), написанная на PL/pgSQL, имеет блочную компоновку и выглядит вот так:

[ <<метка>> ]
[ DECLARE
    объявления переменных ]
BEGIN
    тело программы
END [ метка ];
/*  Многострочный
    комментарий */
--  Однострочный комментарий

Как и принято, квадратными скобками выделены фрагменты, которые опциональны и могут не присутствовать в конкретном варианте.

Каждое отдельное объявление и каждая конструкция внутри тела программы должна заканчиваться точкой с запятой. Блок, находящийся внутри другого блока, также должен иметь точку с запятой после завершающего END, однако самое «внешнее» END в точке с запятой не нуждается.

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

Синтаксис языка

Формат объявления переменных

Любая переменная в PL/pgSQL должна быть объявлена перед использованием, неявное объявление не поддерживается; единственным исключением является цикл FOR — в нем переменная цикла по умолчанию объявляется как INTEGER. Возможно сразу же присваивать переменной значение либо объявлять её как константу:

имя [ CONSTANT ] тип [ NOT NULL ] [ { DEFAULT | := } значение ];

Ключевое слово DEFAULT применяется для задания значения по умолчанию, ключевое слово CONSTANT защищает переменную от дальнейшего изменения, определяя её как константу.

Передача аргументов

По умолчанию переданные параметры обозначаются как $1, $2 и так далее. Однако, если желательно увеличить читабельность кода, то можно обозначить эти параметры с помощью псевдонимов. Возможны два способа.

Можно задавать имя параметра непосредственно в определении функции:

CREATE FUNCTION sales_tax(subtotal REAL) RETURNS REAL AS $$
BEGIN
    RETURN subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;

Иначе, можно объявить псевдоним для параметра непосредственно в разделе объявлений переменных:

CREATE FUNCTION sales_tax(REAL) RETURNS REAL AS $$
DECLARE
    subtotal ALIAS FOR $1;
BEGIN
    RETURN subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "PL/pgSQL" в других словарях:

  • pgsql — PostgreSQL Datenbank, auch Installationspfadname (/usr/local/pgsql) …   Acronyms

  • pgsql — PostgreSQL Datenbank, auch Installationspfadname (/usr/local/pgsql) …   Acronyms von A bis Z

  • PL/pgSQL — (Procedural Language/PostgreSQL Structured Query Language) is a procedural language supported by the PostgreSQL RDBMS. It closely resembles Oracle s PL/SQL language.PL/pgSQL, as a fully featured programming language, allows much more procedural… …   Wikipedia

  • PL/PgSQL — (Procedural Language/PostgreSQL Structured Query Language) es un lenguaje imperativo provisto por el gestor de base de datos PostgreSQL. Permite ejecutar comandos SQL mediante un lenguaje de sentencias imperativas y uso de funciones, dando mucho… …   Wikipedia Español

  • PL/pgSQL — (Procedural Language/PostgreSQL Structured Query Language) est un langage procédural supporté par PostgreSQL. Il ressemble fortement au PL/SQL d Oracle. Portail des bases de données Ce document provient de « PL/pgSQL » …   Wikipédia en Français

  • PL/PgSQL — (Procedural Language/PostgreSQL Structured Query Language) es un lenguaje imperativo provisto por el gestor de base de datos PostgreSQL. Permite ejecutar comandos SQL mediante un lenguaje de sentencias imperativas y uso de funciones, dando mucho… …   Enciclopedia Universal

  • PostgreSQL — Developer(s) PostgreSQL Global Development Group Stable release 9.1.1[1] / 9.0.5 …   Wikipedia

  • Tom Lane (Open Source Software Developer) — Infobox Scientist name = Tom Lane birth date = birth date|1955|9|18 birth place = Madrid, Spain residence = U.S. nationality = field = Computer Science alma mater = Carnegie Mellon University known for = The Independent JPEG Group (IJG)… …   Wikipedia

  • PostgreSQL — Логотип PostgreSQL Тип Объектно реля …   Википедия

  • Sql — Содержание 1 История 1.1 Вопросы совместимости 2 Преимущества и недостатки …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»