PostgreSQL - используйте функцию для именования столбца в запросе выбора. - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь динамически установить имя столбца в запросе "выбрать .. из".Поэтому я создал функцию, возвращающую имя столбца, и попытался использовать ее в запросе выбора.

Функция такая:

CREATE OR REPLACE FUNCTION get_column_name(iddoc int, campo text) RETURNS text
AS $$
#print_strict_params on
DECLARE
campoid text;
BEGIN

    SELECT campo_id INTO STRICT campoid
    FROM campos_td c
    JOIN (SELECT field4, field3 
        FROM frm7 
        WHERE iddocumento = iddoc) f ON c.tema_id = f.field3

    RETURN 'field10' || campoid;
END
$$ LANGUAGE plpgsql;

И я пробовал такие вещи, как:

SELECT get_column_name(2, 'Size') FROM frm7
SELECT f.get_column_name(2, 'Size') FROM frm7 as f

Но ни один из них не работает.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Команда pgsql EXECUTE позволяет запустить произвольную строку SQL, в частности ту, которую вы создали с именами столбцов, переданными во время выполнения.

0 голосов
/ 30 января 2019

Я не очень хорошо разбираюсь в SQL, но вы можете попробовать это:

DECLARE @query NVARCHAR(MAX);

set @query = 'SELECT ' + get_column_name(2, 'Size') + ' FROM frm7';

execute @query;

Пример:

DECLARE @query NVARCHAR(MAX);
DECLARE @colName NVARCHAR(MAX) = 'col1'; 
set @query = 'SELECT ' + @colName + ' FROM frm7';

execute @query;
...