выбрать из функции - PullRequest
       1

выбрать из функции

0 голосов
/ 16 июня 2020

Мне нужно выйти из функции, когда выполнено первое условие. но я получаю сообщение об ошибке «отношение», вкладка «не существует». В чем может быть проблема? Например,

CREATE OR REPLACE function test_func(id int)
 RETURNS TABLE(results_q int4,flag character varying)
 LANGUAGE plpgsql
AS $function$
declare
    act_res int:= null;
    reason              varchar(255)        := null; 

begin
 with tab as (
     select 4/id  as res 
     where id = 2
    )

    select res into act_res from tab;

    if (act_res is not null)
    then
    return query 
    select res,
    case when res = 2 then 'Y'::varchar  end as flag
    from tab
    ;
    else 
  return query  with tab2 as (
     select 4+id  as res 
     )  
     select res,
     'N'::varchar as flag
    from tab2;

end if;
end;
$function$
;

, если я пропущу «2», я хочу выполнить выбор из вкладки и завершить функцию. Спасибо за любые идеи!

1 Ответ

0 голосов
/ 16 июня 2020

Проблема здесь:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...