Доброго всем времени суток!
Подскажите, есть ли возможность создать функцию с переменными:
1. Имя таблицы, из которой необходимо сделать запрос;
2. входящие значения(например id > 100);
3. исходящие, т.е., например, имя колонки в запросе;
что-то типа такого:
CREATE OR REPLACE FUNCTION test(tabl_name varchar, field_in varchar, field_out varchar)
...
SELECT $3 FROM $1 WHERE $2>100;
...
т.е. объединить два запроса:
1.
SELECT * FROM test() AS (id int,code varchar);
2.
CREATE OR REPLACE FUNCTION test(tabl_name varchar) RETURNS SETOF RECORDS AS $BODY$ DECLARE r record; BEGIN FOR r IN SELECT id,code FROM products LOOP RETURN next r; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql;
чтобы можно было вместо products использовать переменную tabl_name
и не объявлять все колонки в запросе ( ... as (id int,code varchar)... )
Есть ли подобный рабочий вариант в природе?
postgresql.ru.net/docs/extent
postgresql.ru.net/docs/extented_FAQ.html#Q003
postgresql.ru.net/docs/extented_FAQ.html#Q004
Обходной путь - используйте EXECUTE
Можно , но неэффективно
Такая процедура будет каждый раз делать prepare, пересчитывать план и будет крайне неэффективной, т.е. смысл ХП теряется как таковой.
Обычно такое нужно, если неверно спроектирована БД
Реализовать можно например так, но при условии, что все поля присутствуют в таблице table_name:
Всем спасибо!
Всем спасибо! Придётся плодить функции...