2017-02-23 5 views
0

Ich versuche, Ausnahme in einer postgresql gespeicherten Prozedur zu fangen. Ohne meine "Ausnahme wenn andere" funktioniert mein Verfahren. Aber nicht damit.Postgresql, Rückgabe Fehler mit Ausnahme

Dies ist mein Code:

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; 

auf Eichhörnchen, ich diesen Fehler hava

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

Aber ich verstehe es nicht. Haben sie eine Idee ? Vielen Dank.

Antwort

1

Sie verwenden nicht das Ergebnis der Auswahl im Ausnahmeblock. Die Nachricht besagt eindeutig, dass Sie PERFORM verwenden müssen, wenn Sie beabsichtigen, etwas auszuführen, das die Ausgabe ignoriert (wie eine SELECT, deren Ergebnismenge Sie nicht in eine Variable einfügen ... es sei denn, = bedeutet, dass Sie INTO ccc verwenden möchten).

+0

Rückfrage ist eine Form der Rückkehr, die Tabelle (Satz Datensätze) zurückgeben können –

+0

@RomanTkachuk Vielen Dank, ich stehe behoben :) – Alfabravo

+0

Vielen Dank für Ihre Antwort. Es hilft mir sehr. – Paladice