Хранимая процедура: возврат строки разного формата
От | 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 по дате отправления: