чехол внутри функции - PullRequest
       45

чехол внутри функции

0 голосов
/ 29 апреля 2020

Вот мой код:

CREATE OR REPLACE FUNCTION getNumberOfPersons(num int)
RETURNS numeric LANGUAGE sql AS
$$
CASE WHEN (SELECT * FROM getTotalPersons(num)) is not null THEN SELECT getPerson(num)+getTotalPersons(num)*getPerson(num) ELSE SELECT getPerson(num) END;
$$;

До того, как я использовал CASE с тем же кодом (и только с первой ветвью), все работало нормально, но теперь с CASE я получаю синтаксическую ошибку error в или около CASE ». Я не вижу, где моя ошибка.

1 Ответ

1 голос
/ 29 апреля 2020

В language sql функциях вы не можете иметь PL / pg SQL оператор CASE только выражение CASE

Но здесь не нужно ни того, ни другого , Простое объединение сделает:

CREATE OR REPLACE FUNCTION getNumberOfPersons(num int)
RETURNS numeric LANGUAGE sql AS
$$
  select coalesce(getTotalPersons(num),1) * getPerson(num);
$$;

Кстати: скалярная функция не должна использоваться как табличная функция.
Итак, SELECT * FROM getTotalPersons(num) должно быть select getTotalPersons(num)

...