SQL state: 42601. Execption handling.

Started by Цalmost 4 years ago1 messagesgeneral
Jump to latest
#1Ц
pfunk@mail.ru

Community, is that behavior is explainable ?
 
create   or   replace   function  dbo.func(result  out   int )  as  $$ begin  result =  1 ;  end ; $$  language  plpgsql;

-- 1 --
do  $$
declare
v_result  int ;
begin  
   select  p.result  from  dbo.func(d) p  into  v_result;
exception   when  SQLSTATE  '42601'   then
     raise   '42601' ;
   when   others   then  
     raise   'others' ;
end ;
$$
 
--Exception is handled. This is OK.
ERROR:   others
CONTEXT:  PL/pgSQL  function  inline_code_block line  9   at   RAISE
********** Error **********
ERROR:  others
SQL  state: P0001
Context: PL/pgSQL  function  inline_code_block line  9   at   RAISE

-- 2 --
do  $$
begin  
   select  p.result  from  dbo.func() p  into  v_result;
exception   when  SQLSTATE  '42601'   then
     raise   '42601' ;
   when   others   then  
     raise   'others' ;
end ;
$$
 
--Exception is not handled. This is the question.
ERROR:   "v_result"   is   not  a known variable
LINE  3 :    select  p.result  from  dbo.func() p  into  v_result;
********** Error **********
ERROR:  "v_result"   is   not  a known variable
SQL  state:  42601
Character :  57
 
I suppose the reason of such behavior in different steps of code parsing, but can`t find any discussions or topics in documentation.
Сould someone clarify the situation for sure?