Использование RETURNING

Создадим таблицу для хранения информации о людях.

CREATE TABLE people
(
  user_id BIGSERIAL PRIMARY KEY,
  user_name TEXT,
  user_age INTEGER
);

Заполним таблицу записями.

После каждого добавления записи система будет возвращать информацию о добавленной записи.

Это поможет узнать после добавления user_id добавленной записи, который генерируется системой.

INSERT INTO people (user_name, user_age) VALUES ('Maxim', 25) 
RETURNING user_id AS u1, user_name AS u2, user_age AS u3;

INSERT INTO people (user_name, user_age) VALUES ('Nina', 30) 
RETURNING user_id AS u1, user_name AS u2, user_age AS u3;

INSERT INTO people (user_name, user_age) VALUES ('George', 17) 
RETURNING user_id AS u1, user_name AS u2, user_age AS u3;

Получаем содержимое таблицы.

SELECT * FROM people ORDER BY user_id ASC;

Заменим содержимое одной записи и вернём содержимое записи после изменения (обновлённое содержимое).

UPDATE people SET user_name = 'Anatoluy' WHERE user_id = 2 
RETURNING user_id AS u1, user_name AS u2, user_age AS u3;

Снова выведем на экран содержимое таблицы.

SELECT * FROM people ORDER BY user_id ASC;

Возврат результата запроса с помощью хранимой процедуры

Создадим хранимую процедуру, которая будет возвращать содержимое таблицы people.

Записи при возврате будут отсортированы по убыванию поля user_id.

CREATE OR REPLACE FUNCTION get_all_people_desc ( )
   RETURNS TABLE 
   (
      user_id BIGINT,
      user_name TEXT,
      user_age INTEGER
   ) 
   AS $mytable$
BEGIN
   RETURN QUERY 
   SELECT * FROM people ORDER BY user_id DESC;
END

$mytable$ LANGUAGE plpgsql;

Вызываем данную хранимую процедуру.

SELECT * FROM get_all_people_desc();

Last updated

Was this helpful?