замучился с COALESCE

Создаю функцию:

CREATE FUNCTION getabntax(IN taxtypeid integer, IN currentdate date, OUT summtax numeric)
  RETURNS numeric AS
$BODY$
  SELECT COALESCE(summtax, 0) FROM abn_tax
  WHERE taxupdate =
       (SELECT max(taxupdate)
        FROM abn_tax
        WHERE taxtypeid = $1
          AND taxupdate <= $2)
  AND taxtypeid = $1
$BODY$
  LANGUAGE 'sql' VOLATILE SECURITY DEFINER;

Ввожу: SELECT summtax FROM getabntax(1,'1996-01-01');
И получаю null, а не 0 как ожидал.
Причем SELECT COALESCE(summtax, 0) FROM getabntax(1,'1996-01-01');
возвращает-таки 0

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

подозреваю, что

подозреваю, что ваш запрос возвращает пустой набор

--foo пустая
SELECT(SELECT coalesce(id,0) FROM foo) IS NULL;
--true

попробуйте так

SELECT COALESCE(
  (SELECT summtax 
  FROM abn_tax 
  WHERE 
    taxupdate <img class="ccfilter smileys" src="https://pgdocs.ru/sites/all/modules/ccfilter/smileys/ac.gif" alt="=(" title="=(" />
      SELECT MAX(taxupdate) 
      FROM abn_tax 
      WHERE taxtypeid = $1 AND 
            taxupdate <= $2) AND
    taxtypeid= $1), 0)

спасибо

Вот уж действительно: век живи - век учись!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023