2017-02-23 89 views
0

我试图捕获postgresql存储过程中的异常。 没有我的“其他”异常,我的程序正在工作。但不要与它。Postgresql,异常返回错误

这是我的代码:

create or replace function test(aaa varchar) 
returns table (mmm integer, xxx integer) 
as $body$ 
declare 
    ccc    varchar(250); 
    ddd  integer; 
    xxx  integer; 
    mmm   integer; 
begin 

    select 
     srv_int_id 
    into 
     mmm 
    from 
     srv_service 
    where 
     srv_var_nom = aaa; 

    ddd := 1/0; 

    xxx := test2(9000,'AAA'); 

    return query select 
     xxx, 
     mmm; 

exception 
    when others then 
     select ccc = 'Erreur ' || sqlstate || ' dans la procedure test.sql'; 
     return query select 0,0; 

end; 
$body$ language plpgsql; 

在松鼠,我哈瓦这个错误

Error: ERREUR: la requête n'a pas de destination pour les données résultantes Indice : Si vous voulez annuler les résultats d'un SELECT, utilisez PERFORM > à la place. Où : fonction PL/pgsql p_ech_mes_lire_info_message(character varying), ligne > 44 à instruction SQL SQLState: 42601 ErrorCode: 0

但我不明白。你有好主意吗 ?谢谢。

回答

1

您没有在异常块中使用select的结果。该消息明确指出,如果您打算忽略输出(例如SELECT的结果集未放入任何变量中,除非=表示您想要使用INTO ccc),否则必须使用PERFORM

+0

返回查询是一种允许返回表格(记录集)的返回形式 –

+0

@RomanTkachuk谢谢,我站在更正的位置:) – Alfabravo

+0

感谢您的回答。它帮助我很多。 – Paladice