Я написал функцию, которая выводит правильно сформированный запрос PostgreSQL SELECT
в текстовой форме. Теперь я больше не хочу выводить текст, а фактически запускаю сгенерированный оператор 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'
КромеDatahora
(timestamp
)все столбцы имеют тип double precision
.
type
:'myTable'
Может быть именем одной из четырех таблиц. Каждый из них имеет разные столбцы, за исключением общего столбца Datahora
.
Переменная sensors
будет содержать все отображаемые здесь столбцы для соответствующей таблицы в 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. Я хочу автоматизировать это, автоматически запускать запрос и возвращать результат. Как я могу это сделать?