From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Хранимая процедура: возврат строки разного формата |
Date: | 2011-03-07 18:13:34 |
Message-ID: | 20110307181334.GD13245@apache.rbscorp.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry E. Oboukhov | 2011-03-07 18:23:05 | Re: хранимая процедура: как вернуть NOT FOUND? |
Previous Message | Dmitriy Igrishin | 2011-03-07 17:15:49 | Re: [pgsql-ru-general] хранимая процедура: как вернуть NOT FOUND? |