Есть ли способ запроса текущих значений строк в сочетании с отфильтрованным набором результатов из той же таблицы с помощью функции PostgreSQL - PullRequest
0 голосов
/ 24 октября 2019

У меня есть запрос, который работает как ожидалось, и теперь я хотел бы обратиться к функции, которая может обновлять значения во второй таблице, когда происходит изменение в строке исходной таблицы.

Запрос сравнивает значение каждой строки со ссылочным значением в той же таблице

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

CREATE OR REPLACE FUNCTION public.____MBPX_CurrentOverEv(in_reading readings)
    RETURNS numeric
    LANGUAGE 'sql'

AS $BODY$

SELECT 

(r1.node1_value/r1.ev_value)-(r2.node1_value/r2.ev_value) as n1
,(r1.node2_value/r1.ev_value)-(r2.node2_value/r2.ev_value) as n2
,(r1.node3_value/r1.ev_value)-(r2.node3_value/r2.ev_value) as n3
,(r1.node4_value/r1.ev_value)-(r2.node4_value/r2.ev_value) as n4
,(r1.node5_value/r1.ev_value)-(r2.node5_value/r2.ev_value) as n5
,(r1.node6_value/r1.ev_value)-(r2.node6_value/r2.ev_value) as n6

FROM in_reading r1
full join in_reading r2 on r1.instrument_id =r2.instrument_id
where r2.reading_type = 'reference' 


;
    $BODY$;

Я получаю эту ошибку:

ERROR:  relation "in_reading" does not exist
LINE 18: FROM in_reading r1
              ^
SQL state: 42P01
Character: 540

1 Ответ

0 голосов
/ 24 октября 2019

Возможно, вам лучше просто сделать представление:

CREATE OR REPLACE VIEW ____MBPX_CurrentOverEv
AS
SELECT 
(r1.node1_value/r1.ev_value)-(r2.node1_value/r2.ev_value) as n1
,(r1.node2_value/r1.ev_value)-(r2.node2_value/r2.ev_value) as n2
,(r1.node3_value/r1.ev_value)-(r2.node3_value/r2.ev_value) as n3
,(r1.node4_value/r1.ev_value)-(r2.node4_value/r2.ev_value) as n4
,(r1.node5_value/r1.ev_value)-(r2.node5_value/r2.ev_value) as n5
,(r1.node6_value/r1.ev_value)-(r2.node6_value/r2.ev_value) as n6
FROM in_reading r1
full join in_reading r2 on r1.instrument_id =r2.instrument_id
where r2.reading_type = 'reference';

Это может быть достаточно для вас, если только вы не планировали динамически добавлять больше предложений (например, r1.node6_value/r1.ev_value)....)

Раскрытие информации: я работаю на EnterpriseDB (EDB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...