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

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

Responses

Browse pgsql-ru-general by date

  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?