Каков правильный синтаксис хранимых процедур (функций) PostgreSQL? - PullRequest
5 голосов
/ 10 августа 2011

Я пытаюсь написать два типа хранимых процедур в PostgreSQL. Из того, что я понимаю, у Postgre есть только функции. Мне было интересно, если кто-то может взглянуть на мой код и предложить указатели. Кроме того, я не знаю, с пробелами / новыми строками команд.

Первая функция должна получить ввод от пользователя и добавить его в таблицу. Предположим, у нас есть имя таблицы «Автомобиль» с атрибутами «модель» и «год». Это будет правильная сохраненная функция для добавления новой машины в таблицу?

CREATE OR REPLACE FUNCTION
    addto_car(model IN Car.model%type, year IN Car.year%type)
RETURNS
    void
AS $$
BEGIN
    INSERT INTO Car VALUES(model, year);
END;
$$ LANGUAGE plpgsql; (#Is this correct? I'm using postgresql 9)

---------- Код в процессе работы Функция 1

CREATE OR REPLACE FUNCTION
    addto_car(In model Car.model%type, IN year Car.year%type)
AS $$
BEGIN
    INSERT INTO Car VALUES(model, year);
END;
$$ LANGUAGE plpgsql;

Теперь это работает! (вставляет значения модели и года в Car).

1 Ответ

5 голосов
/ 10 августа 2011

Из Официальной документации

CREATE [ OR REPLACE ] FUNCTION
    name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
    [ RETURNS rettype
      | RETURNS TABLE ( column_name column_type [, ...] ) ]
  { LANGUAGE lang_name
    | 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 [, ...] ) ]

Вы найдете там свой ответ и, возможно, узнаете две или три полезные вещи в процессе.

Вам может быть особенно интересна конструкция RETURNS TABLE.

...