не забывайте про ;
но в вашем случае вы не можете использовать update внутри select. это против правил. Либо пишите хранимку, либо какой-нибудь другой вариант.
romy4: Странно у меня при создании функции с CASE без SELECT выдает ошибку...
И вот сделал теперь вот так, но все равно выходит ошибка синтаксиса:
SELECT CASE WHEN a=0 THEN
set_function(b);
get_function(b)
WHEN a=1
set_function(b);
get_function(b)
ELSE get_function(b)
END;
Это все пытаюсь сделать внутри функции.
romy4: В итоге заработало вот так, хотя мне кажется это не совсем правильно...
SELECT CASE WHEN a=0 THEN
(SELECT get_function(b) FROM set_function(b))
WHEN a=1
(SELECT get_function(b) FROM set_function(b))
ELSE get_function(b)
END;
Вот примерный текст функции. Создаю её при помощи pgAdmin.
CREATE FUNCTION public.get(IN topic integer) RETURNS character varying AS
$BODY$CASE WHEN (SELECT count(a) FROM table WHERE b='FALSE' AND d=topic)>0 THEN
get_on_topic(topic)
WHEN (SELECT count(a) FROM table WHERE d=topic)>0 THEN
(SELECT get_on_topic(topic) FROM set_a_on_topic(topic))
WHEN (SELECT DISTINCT count(a) FROM table,table2 WHERE table.c=table2.c AND b='FALSE' AND d=topic)>0 THEN
get_b_on_topic(topic)
WHEN (SELECT DISTINCT count(a) FROM table,table2 WHERE table.c=table2.c AND d=topic)>0 THEN
(SELECT get_b_on_topic(topic) FROM set_a_b_on_topic(topic))
WHEN (SELECT count(a) FROM table,table3 WHERE table.b='FALSE' AND table.c=table3.c AND d=topic)>0 THEN
get_q_on_topic(topic)
ELSE
(SELECT get_q_on_topic(topic) FROM set_a_q_on_topic(topic))
END;$BODY$
LANGUAGE sql VOLATILE NOT LEAKPROOF;
А выдает следующую ошибку - Ошибка синтаксиса(примерное положение "CASE").
romy4: ну вообще как я писал, я создавал функцию через pgadmin. До этого все другие функции работали. документацию брал отсюда https://postgrespro.ru/docs/postgrespro/9.5/xfunc-...
Там собственно про Begin ни слова...
Я похоже понял. Суть в том что я пишу функцию при помощи sql, а не pl/pgsql. там действительно begin нужен... Наверное из-за этого же и SELECT для CASE нужен.