Поиск…


замечания

PL / pgSQL - это встроенный язык программирования PostgreSQL для написания функций, которые выполняются в самой базе данных, известной как хранимые процедуры в других базах данных. Он расширяет SQL с помощью циклов, условных выражений и возвращаемых типов. Хотя его синтаксис может быть странным для многих разработчиков, он намного быстрее, чем все, что работает на сервере приложений, потому что устранены накладные расходы на подключение к базе данных, что особенно полезно, когда вам в противном случае нужно было бы выполнить запрос, дождаться результата, и отправить другой запрос.

Хотя для PostgreSQL существует много других процедурных языков, таких как PL / Python, PL / Perl и PLV8, PL / pgSQL является общей отправной точкой для разработчиков, которые хотят написать свою первую функцию PostgreSQL, потому что ее синтаксис построен на SQL. Он также похож на PL / SQL, собственный процедурный язык Oracle, поэтому любой разработчик, знакомый с PL / SQL, найдет язык знакомым, и любой разработчик, который намеревается разрабатывать приложения Oracle в будущем, но хочет начать с бесплатной базы данных, может перейти от PL / pgSQL до PL / SQL с относительной легкостью.

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

Вот ссылки на некоторые бесплатные руководства и книги по PL / pgSQL:

Основная функция PL / pgSQL

Простая функция PL / pgSQL:

CREATE FUNCTION active_subscribers() RETURNS bigint AS $$
DECLARE
    -- variable for the following BEGIN ... END block
    subscribers integer;
BEGIN
    -- SELECT must always be used with INTO
    SELECT COUNT(user_id) INTO subscribers FROM users WHERE subscribed;
    -- function result
    RETURN subscribers;
EXCEPTION
    -- return NULL if table "users" does not exist
    WHEN undefined_table
    THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;

Это могло быть достигнуто только с помощью инструкции SQL, но демонстрирует основную структуру функции.

Для выполнения функции выполните:

select active_subscribers();

Синтаксис PL / pgSQL

CREATE [OR REPLACE] FUNCTION functionName (someParameter 'parameterType') 
RETURNS 'DATATYPE'
AS $_block_name_$
DECLARE
    --declare something
BEGIN
    --do something
    --return something
END;
$_block_name_$
LANGUAGE plpgsql;

RETURNS Block

Параметры для возврата в PL / pgSQL:

пользовательские исключения

создание настраиваемого исключения «P2222»:

create or replace function s164() returns void as
$$
begin
raise exception using message = 'S 164', detail = 'D 164', hint = 'H 164', errcode = 'P2222';
end;
$$ language plpgsql
;

создание настраиваемого исключения, не присваивающего errm:

create or replace function s165() returns void as
$$
begin
raise exception '%','nothing specified';
end;
$$ language plpgsql
;

призвание:

t=# do
$$
declare
 _t text;
begin
  perform s165();
  exception when SQLSTATE 'P0001' then raise info '%','state P0001 caught: '||SQLERRM;
  perform s164();

end;
$$
;
INFO:  state P0001 caught: nothing specified
ERROR:  S 164
DETAIL:  D 164
HINT:  H 164
CONTEXT:  SQL statement "SELECT s164()"
PL/pgSQL function inline_code_block line 7 at PERFORM

здесь пользовательский P0001 обрабатывается, а P2222, а не, прерывает выполнение.

Также имеет смысл хранить таблицу исключений, например здесь: http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow