SQLCODE und SQLERRM in PostgreSQL

Hallo,

ich will von Oracle zu PostgreSQL migrieren und habe in einer meiner Oracle-Funktion folgende Fehlermeldung:

raise_application_error(-20001, 'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

Funktionen SQLCODE und SQLERRM liefen dabei Zahlen für die Fehlererkennen. (siehe auch hier) Hat PostgreSQL vergleichbare Funktionen?

Ich denke SQLSTATE ist vergleichbar:

PostgreSQL: Documentation: Manuals: PostgreSQL 9: Errors and Messages

SQLCODE und SQLERRM haben vordefinierte Fehler-Nummern. (Wie man in meinem Link in der Tabelle sehen kann).

SQLSTATE scheint nur selbstdefinierte Fehler-Nummern auszugeben, oder verstehe ich das falsch?

PostgreSQL: Documentation: Manuals: PostgreSQL 9: PostgreSQL Error Codes

Andreas

Ich verstehe das nicht so ganz. Ich habe folgende Fehlermeldung geschriebene:

RAISE EXCEPTION ‘Error: Invalid GLN - %’, SQLERRM USING ERRCODE = SQLSTATE ;

Ich dachte, das USING würde sqlerrm das SQLstate zuweisen, tut es aber anscheinend nicht, weil immer nur an der Stelle ausgegeben wird. Was mach ich falsch?

Ich habe auch nochmal hier ein nettes Beispiel gefunden:
Exceptions und Errors [Archive] - Informatik-Forum.at

Das wird folgende Funktion erstellt:

CREATE OR REPLACE FUNCTION f_bestellwert(bid integer) RETURNS float AS $$
DECLARE
    betrag float;
BEGIN
    SELECT sum(b.anzahl*p.preis) as bestellwert INTO betrag
    FROM bestellen b INNER JOIN 
        preise p ON b.land=p.land AND b.artikel=p.artikel AND
        b.datum=p.datum
    WHERE b.bestellung = bid
    GROUP BY b.bestellung;
    RETURN betrag;
    EXCEPTION WHEN OTHERS THEN
        RAISE EXCEPTION '%', SQLERRM USING ERRCODE = SQLSTATE;
        RETURN -1;
    END;
$$ LANGUAGE plpgsql;

Bei mit aber kommt der Fehler:
FEHLER: Spalte »sqlerrm« existiert nicht
LINE 1: SELECT SQLERRM

Meine Funktion geht aber ähnlich:

CREATE OR REPLACE FUNCTION  CHECK (NUMERIC)
returns NUMERIC
AS $function$
declare
  glnin ALIAS FOR $1;
  num INTEGER;
begin
  [...]
  RETURN glnin;
  
  EXCEPTION WHEN OTHERS THEN
    RAISE EXCEPTION  'An error was encountered - %', SQLERRM USING ERRCODE = SQLSTATE;
end
$function$
LANGUAGE 'plpgsql';