Передача параметра временной метки в функцию в Postgresql 10.6 - PullRequest
0 голосов
/ 26 июня 2019

Я строю эту функцию:

CREATE OR REPLACE FUNCTION qradar21(cliente_in VARCHAR(50), fecha_inicio timestamp, fecha_fin timestamp) RETURNS TABLE(empresa varchar, fecha timestamp, fuente text, total float) AS $$
    BEGIN
        RETURN QUERY
            SELECT qradar_eventos_detalle.empresa, qradar_eventos_detalle.fecha, eventos->>'fuente' AS fuente, sum((eventos->>'total')::float) AS total FROM public.qradar_eventos_detalle
            WHERE qradar_eventos_detalle.empresa = 'cliente_in'
            AND qradar_eventos_detalle.fecha BETWEEN 'fecha_inicio' AND 'fecha_fin'
            GROUP BY qradar_eventos_detalle.empresa, qradar_eventos_detalle.fecha, qradar_eventos_detalle.eventos
            ORDER BY total DESC;
    END;
$$ LANGUAGE plpgsql

И вызывая его с помощью:

SELECT * FROM qradar21('BancoXXX', '2018-12-29 12:00:00', '2019-03-03 07:00:00');

Получение этого сообщения:

ОШИБКА: неверный синтаксис ввода для отметки времени типа: «fecha_inicio» ЛИНИЯ 3: И qradar_eventos_detalle.fecha МЕЖДУ 'fecha_inicio' A ...

Если я изменю функцию для непосредственного использования даты (AND qradar_eventos_detalle.fecha МЕЖДУ '2018-12-29 12:00:00' И '2018-12-30 07:00:00'), она прекрасно работает.

Я не знаю, что я делаю неправильно ... Кто-нибудь знает, как передать этот формат "отметка времени без часового пояса" в функцию? Заранее спасибо

1 Ответ

0 голосов
/ 26 июня 2019

Ваша функция использует строковые литералы, а не ссылки на параметры.

Вам необходимо удалить одинарные кавычки вокруг имен ваших параметров:

WHERE qradar_eventos_detalle.empresa = cliente_in --<< no quotes here!
AND qradar_eventos_detalle.fecha BETWEEN fecha_inicio AND fecha_fin
                                         ^
                                        or here

Когда вы вызываете его, также лучше использовать правильный литерал метки времени:

SELECT * 
FROM qradar21('BancoXXX', timestamp '2018-12-29 12:00:00', timestamp '2019-03-03 07:00:00');
...