2017-02-23 88 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