2014-07-25 3 views
1

В функции plpgsql, как можно выбрать несколько строк и столбцов в переменную записи?ВЫБЕРИТЕ несколько строк и столбцов в переменную записи

Например, я хотел бы SELECT несколько экземпляров двух столбцов (yearinteger и value) в переменную записи (yearvalues).

* EDIT - следующий код является лишь частью более длинной функции, мне нужна переменная yearvalues чтобы содержать несколько строк и столбцов из таблицы, из которой я могу создать дополнительные переменные из

CREATE OR REPLACE FUNCTION fn_function() 
RETURNS TABLE() AS $$ 
DECLARE 
    year c.year%TYPE; 
    value c.value%TYPE; 
    yearvalues record; 
BEGIN 
    FOR yearvalues IN 
    SELECT c.year, c.value FROM c 
    LOOP 
    END LOOP; 
-- creation of additional variables from the yearvalues variable 
END; 
$$ LANGUAGE plpgsql; 
+0

.. и когда вы запускаете эту функцию, что происходит? (Всегда показывать точный текст сообщения об ошибке). –

+0

прочитайте [это] (http://www.day32.com/MySQL/Meetup/Presentations/postgresql_stored_procedures.pdf) и просмотрите [Ресурсы PosgreSQL в SO] (http://stackoverflow.com/tags/postgresql/info) –

+0

Если функция возвращает таблицу, почему бы не использовать функцию 'sql', которая просто возвращает результат' select'? Или 'return query' в функции PL/pgSQL? –

ответ

2

Есть нет переменные таблицы в plpgsql (по крайней мере, до v10).

Можно использовать временную таблицу:

Вы можете заменить с КТР (или даже подзапросов в простых случаях) для локального объема одного запроса. «Единый запрос» может включать в себя несколько команд (в модифицирующих данные CTE). Это было бы наиболее эффективным:

Или совместить курсоры с петлями (рассмотрим пример в FNC - Функция):

+0

Благодарим вас за описание различных опций; Я думаю, что курсоры - это то, что я ищу. – interpost

+0

Что значит «(по крайней мере, до версии 9.4)»? Это немного запутанное заявление. Означает ли это, что существуют переменные таблицы в более новых версиях? – user544262772

+0

@ user544262772: Как я узнаю, что на момент написания? В версии 10 нет переменных таблицы, и я не ожидаю, что это изменится в будущих версиях. –

Смежные вопросы