Проблема здесь:
with tab as (
select 4/id as res
where id = 2
)
Идентификатор, который вы передаете в функцию, не будет использоваться в предложении where
.
Вероятно, вам нужно что-то вроде:
IF id = 2 THEN
with tab as (
select 4/id as res
)
select res into act_res from tab;
END IF;
Общий совет, не рекомендуется называть параметры такими же, как SQL идентификаторы, например, имена таблиц, столбцов. plpg sql будет жаловаться во многих случаях. Используйте что-то вроде _id или id_val.