LINUX.ORG.RU

PL/pgSQL: как использовать ROWTYPE + TYPE в SELECT INTO?


0

0

Есть функция
CREATE OR REPLACE FUNCTION match(TEXT, INT, TEXT)
RETURNS voiptariff AS
'
DECLARE
trf tariff%ROWTYPE;
ds dst%ROWTYPE;
prr tariffgrp.priority%TYPE;
a ALIAS FOR $1;
b ALIAS FOR $2;
c ALIAS FOR $3;
BEGIN
SELECT INTO ds * from dst;
.......
Так все работает.
Хочу сделать запрос типа
SELECT INTO ds, prr *, tariffgrp.priority from dst, tariffgrp;

При разных вариантах синтаксиса вываливает ошибки при выполнении функции.

Как правильно объединять переменные и таблицы в запросах?

★★★

Уточняю.
Вариант
SELECT INTO ds, prr *.dst, tariffgrp.priority from dst, tariffgrp;
испробован, тоже ругается.

archont ★★★
() автор топика
Ответ на: комментарий от archont

afair, в pgsql нельзя указывать несколько целей в select into. там может быть только или ds или prr.

как вариант можно создать соответственный view и дергать уже через него

ananas ★★★★★
()
Ответ на: комментарий от ananas

The result of a SELECT command yielding multiple columns (but only one row) can be assigned to a record variable, row-type variable, or list of scalar variables. This is done by:

SELECT INTO target select_expressions FROM ...;

where target can be a record variable, a row variable, or a comma-separated list of simple variables and record/row fields. The select_expressions and the remainder of the command are the same as in regular SQL.

Это из документации к PostgreSQL-7.4.5, каковым я и пользуюсь.
Может быть я не правильно понимаю, что здесь написано?
Или написанное не распространяется на тип TYPE?
И как сюда втащить view?
Объявить его перед select?

archont ★★★
() автор топика
Ответ на: комментарий от ananas

>rowtype не является скаляром

Лаконично...
Т.е. его нельзя использовать в списке?
А TYPE?
И как тогда быть с этим:
target can be a record variable, a row variable, or a comma-separated list of simple variables and record/row fields?

archont ★★★
() автор топика
Ответ на: комментарий от archont

а что непонятного. или то, или то, или список. если вы перечислите все поля ds, то сработает.

или используйте record, впихивайте туда результат селекта из нескольких таблиц и потом с этим рекордом работайте.

ananas ★★★★★
()
Ответ на: комментарий от ananas

При явном указании всех полей ds тоже не работало, ругалось. А с RECORD не пробовал. Спасибо, попробую.

archont ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.