Иллюстрированный самоучитель по PostgreSQL

Переменные

Возможен и другой вариант – присваивание переменной результата запроса командой SELECT INTO. He путайте этот вариант использования команды SELECT INTO с командой SQL SELECT INTO, которая заносит результаты запроса в новую таблицу.

Примечание
Для сохранения результатов запроса в новой таблице в PL/pgSQL используется альтернативный синтаксис SQL CREATE TABLE AS SELECT
.

Команда SELECT INTO в основном требуется для сохранения данных записей в переменных, объявленных с типами UROWTYPE и RECORD. Чтобы команда SELECT INTO могла использоваться с обычной переменной, тип этой переменной должен соответствовать типу поля, упоминаемому в команде SQL SELECT.

Синтаксис команды SELECT INTO:

CREATE FUNCTION идентификатор (аргументы) RETURNS тип AS '
DECLARE
команде:
BEGIN
SELECT INTO переменная [….] поле [,…] секции_select;
END:
' LANGUAGE 'plpgsql':

В этом описании переменная – имя переменной, участвующей в присваивании, a ceкции_select – любые поддерживаемые секции команды SQL SELECT, обычно следующие за списком целевых полей в команде SELECT.

В листинге 11.15 приведена простая функция, в которой используется команда SELECT INTO. Ключевое слово ALIAS описано в подразделе "Аргументы" этого раздела. Примеры выполнения команды SELECT INTO для переменных типа RECORD и OTWTYPE приведены в разделе "Передача управления".

Листинг 11.15. Использование команды SELECT INTO.

CREATE FUNCTION get_customer_id (text.text) RETURNS integer AS '
DECLARE
--Объявление псевдонимов для аргументов.
Ijiame ALIAS FOR $1: f_name ALIAS FOR $2:
--Объявление переменной для хранения кода клиента,
customerjd integer;
BEGIN
--Получение кода клиента, имя и фамилия которого
--совпадают с переданными значениями.
SELECT INTO customerjd id FROM customers
WHERE lastjiame = l_name AND firstjiame = fjiame;
--Вернуть код. RETURN customerjd:
END;
' LANGUAGE 'plpgsql';

В листинге 11.16 показан результат вызова функции get_customer_id() с аргументами Jackson и Annie. Возвращенное число равно коду клиента "Annie Jackson" в таблице customers.

Листинг 11.16. Вызов функции get_customer_id().

booktown=# SELECT get_customer_id{'Jackson','Annie');
get_customer_id
107
(1 row)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.