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?
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';