Рефакторинг функции PL / pgSQL для возврата результатов различных запросов SELECT
Я написал функцию, которая выводит PostgreSQLSELECT
запрос хорошо сформирован в текстовом виде. Теперь я больше не хочу выводить текст, но на самом деле запускаю сгенерированныйSELECT
утверждение против базы данных и вернуть результат - так же, как и сам запрос.
CREATE OR REPLACE FUNCTION data_of(integer)
RETURNS text AS
$BODY$
DECLARE
sensors varchar(100); -- holds list of column names
type varchar(100); -- holds name of table
result text; -- holds SQL query
-- declare more variables
BEGIN
-- do some crazy stuff
result := 'SELECT\r\nDatahora,' || sensors ||
'\r\n\r\nFROM\r\n' || type ||
'\r\n\r\nWHERE\r\id=' || $1 ||'\r\n\r\nORDER BY Datahora;';
RETURN result;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION data_of(integer) OWNER TO postgres;
sensors
содержит список имен столбцов для таблицыtype
, Они объявлены и заполнены в ходе функции. В конце концов, они содержат такие значения, как:
sensors
: 'column1, column2, column3'
Except for Datahora
(timestamp
) all columns are of type double precision
.
type
:'myTable'
Can be the name of one of four tables. Each has different columns, except for the common column Datahora
.
Definition of the underlying tables.
Переменнаяsensors
будет держатьall столбцы отображаются здесь для соответствующей таблицы вtype
, Например: еслиtype
являетсяpcdmet
затемsensors
будет'datahora,dirvento,precipitacao,pressaoatm,radsolacum,tempar,umidrel,velvento'
Переменные используются для построенияSELECT
заявление, которое хранится вresult
, Подобно:
SELECT Datahora, column1, column2, column3
FROM myTable
WHERE id=20
ORDER BY Datahora;
Прямо сейчас моя функция возвращает это утверждение какtext
, Я копирую-вставляю и выполняю его в pgAdmin или через psql. Я хочу автоматизировать это, выполнить запрос автоматически и вернуть результат. Как я могу это сделать?