Является ли мой запрос правильным, как передать параметр в функции хранимых процедур SQL Postgres

Я борюсь с тем, как передать параметр функции хранимых процедур в Postgres SQL. Мой запрос правильный? Я получаю сообщение об ошибке : неверный синтаксис ввода для даты типа: "Первая дата". Что я пропустил? Пожалуйста, посоветуй мне

CREATE OR REPLACE FUNCTION prisonparam(dvn_cd text,
       phc_cd  text,
       Firstdate Date,
       Seconddate Date,
       To Date) 
     RETURNS table (round text,sc bigint,scupto bigint)
     AS $$
     /* query start */
    WITH a
   AS (
       SELECT
        round AS round
       ,Sum(ben_sc) AS SC

       FROM prison_issue
       WHERE (
        DATE BETWEEN 'Firstdate'
            AND 'To'
             )
       AND dvn_cd = 'dvn_cd'
       AND phc_cd = 'phc_cd'

       GROUP BY round ORDER BY round
       )
       ,b
      AS (
     SELECT round AS round_up
     ,Sum(ben_sc) AS SC_up


     FROM prison_issue
     WHERE (
        DATE BETWEEN 'Seconddate'
            AND 'To'
           )
    AND dvn_cd = 'dvn_cd'
    AND phc_cd = 'phc_cd'
    GROUP BY round ORDER BY round
         )
   SELECT b.round_up AS round
  ,coalesce(a.sc, 0) AS SC
  ,coalesce(b.sc_up, 0) AS SCUPTO

  FROM a
  RIGHT JOIN b ON a.round = b.round_up
  /* query end*/
  $$ LANGUAGE sql;

1 ответ

Решение

Не заключайте в кавычки параметры.

 DATE BETWEEN 'Firstdate'
        AND 'To'

пытается использовать 'Firstdate' а также 'To' как литералы.

Не цитируйте их.

 DATE BETWEEN Firstdate
        AND To

или если вы должны использовать, возможно, проблемные идентификаторы, такие как To как переменные, вы должны заключить их в двойные кавычки. Но если вы делаете это, делайте это везде, включая список объявлений параметров.

 DATE BETWEEN Firstdate
        AND "To"
Другие вопросы по тегам