Переменные
Возможен и другой вариант – присваивание переменной результата запроса командой 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)