2016-10-28 3 views
1

Я пытаюсь запросить таблицу с большим количеством столбцов, таких как debMonth1, debMonth2 и т. Д., Чтобы получить результат, соответствующий потребностям приложения, которое должно обрабатывать данные.Выбор postgres с динамическим именем столбца

Синтаксически запрос теперь выглядит нормально, но я не получаю от него никакого результата. Это просто происходит без ошибок.

Я думаю, что у меня возникли проблемы с именами столбцов? Кто-нибудь может мне помочь?

DO $do$ 
DECLARE cmonth TEXT; 
DECLARE dmonth TEXT; 

BEGIN 
FOR i IN 1..15 LOOP 

cmonth = CONCAT('"credMonth' , i::text, '"'); 
dmonth = CONCAT('"debMonth' , i::text, '"'); 

EXECUTE 
format('SELECT 
    "account", "FY", "setOfBooks", $1, $2, $3 AS "fiscalMonth" 
FROM 
    "transaction_figures" 
WHERE 
    "dataType" = ''(80)'' AND 
    ($1 != ''0.00'' OR $2 != ''0.00'')') 
USING cmonth, dmonth, i; 

END LOOP; 
END 
$do$ LANGUAGE plpgsql; 

ответ

0

Запросы, выполненные в plpgsql, не приводят к печати его вывода и отправке на клиент. Вы должны перебирать результаты и делать что-то с этим, например:

DO $do$ 
DECLARE cmonth TEXT; 
DECLARE dmonth TEXT; 
DECLARE r RECORD; 

BEGIN 
FOR i IN 1..15 LOOP 

cmonth = CONCAT('"credMonth' , i::text, '"'); 
dmonth = CONCAT('"debMonth' , i::text, '"'); 

FOR r in 
    EXECUTE 
    format('SELECT 
     "account", "FY", "setOfBooks", $1, $2, $3 AS "fiscalMonth" 
    FROM 
     "transaction_figures" 
    WHERE 
     "dataType" = ''(80)'' AND 
     ($1 != ''0.00'' OR $2 != ''0.00'')') 
    USING cmonth, dmonth, i 
LOOP 
    RAISE NOTICE '%', r; 
END LOOP; 

END LOOP; 
END 
$do$ LANGUAGE plpgsql; 

Это напечатает результаты в psql. Если вы хотите, чтобы данные велись как таблица (т. Е. Отправляемая клиенту), вы должны обернуть свой код в функцию plpgsql и вернуть результат запроса.

Смежные вопросы