Хранимая процедура: возврат строки разного формата

Поиск
Список
Период
Сортировка
От Dmitry E. Oboukhov
Тема Хранимая процедура: возврат строки разного формата
Дата
Msg-id 20110307181334.GD13245@apache.rbscorp.ru
обсуждение исходный текст
Список pgsql-ru-general
есть таблица

parent:
 | id | somecol |

есть десяток унаследованных таблиц:

childX:
 | id | somecol | .... |


есть некий скрипт, который обрабатывает все данные в унаследованных по
каким-то критериям.

работает примерно так:

1. делает
    SELECT
        parent.id,
        pg_class.relname AS tbl
    FROM
        parent, pg_class
    WHERE
        pg_class.oid = r.tableoid
    LIMIT 1;

2. если результаты есть делает
    SELECT
        %1 AS tbl,
        *
    FROM
        %1
    WHERE
        id = %2

    где вместо %1 подставляется поле  tbl выбранное из первого
    запроса, а вместо %2 - id.

После того как результаты обработаны они удаляются из унаследованной
таблицы.

вот хочется запхать 1 и 2 в хранимую процедуру, пишем:

CREATE OR REPLACE FUNCTION foo() RETURNS RECORD AS $$
    DECLARE
        retval RECORD;
        recid  RECORD;
    BEGIN
        SELECT
            p.id,
            pg_class.relname AS tbl
        INTO
            recid
        FROM
            parent, pg_class
        WHERE
            parent.tableoid = pg_class.oid
        LIMIT 1;

        EXECUTE
            'SELECT '''
                || recid.tbl
                || ''' AS tbl, * FROM "'
                || recid.tbl
                || '" WHERE id = '
                || recid.id
            INTO retval;
        RETURN retval;
$$ LANGUAGE 'plpgsql';

получаем примерно то что надо но в виде одного значения:

foo: '(tblname,1234,abc,...)'

а хочется получить в виде такого результата как вернул бы SELECT, то
есть в виде хеша:

tbl:        tblname
id:         1234
somecol:    'abc'
...


И еще, квоттинг: в документации написано что можно использовать
функции quote_ident и quote_value для создания динамических запросов,
но у меня почему-то постгрис на них ругается, говорит: нет такой
функции
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Вложения

В списке pgsql-ru-general по дате отправления:

Предыдущее
От: Dmitriy Igrishin
Дата:
Сообщение: Re: [pgsql-ru-general] хранимая процедура: как вернуть NOT FOUND?
Следующее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: хранимая процедура: как вернуть NOT FOUND?