verstehe ich es richtig, dass es nicht möglich ist Exceptions im DECLARE-Bloch zu bestimmen und somit mehrfach auf einzelne Exceptions zugreifen zu können? Wie zB bei Oracle:
CREATE OR REPLACE FUNCTION "CHECK"
()
return INTEGER
as
PRAGMA AUTONOMOUS_TRANSACTION;
num INTEGER;
exception1 EXCEPTION;
exception2 EXCEPTION;
begin
IF --TEST-- THEN
RAISE exception1;
END IF;
IF --TEST-- THEN
RAISE exception1;
END IF;
IF --TEST-- THEN
RAISE exception2;
END IF;
IF --TEST-- THEN
RAISE exception2;
END IF;
RETURN num;
EXCEPTION
WHEN exception1 THEN
raise_application_error (-20012,'Error: ' || 'GLN already in use' || ' - ' || SQLERRM);
WHEN exception2 THEN
raise_application_error (-20012,'Error: ' || 'Invalid GLN' || ' - ' || SQLERRM);
WHEN OTHERS THEN
raise_application_error(-20001, 'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
end;
Was Du meinst sind custom-exceptions … mit postgres kann man keine solchen deklarieren. Du kannst aber wie in pl/sql auch Exceptions auslösen. Such Dir einfach eine passende vordefinierte Exception aus:
EXCEPTION WHEN OTHERS THEN
RAISE EXCEPTION ‘%’, SQLERRM USING ERRCODE = SQLSTATE;
RETURN -1;
END
Was ist SQLERRM für ein Datentyp? Und warum kommt bei mir ein Fehler wenn ich das mache:
DECLARE
SQLERRM NUMERIC; --TEXT hat ich auch ausprobiert
BEGIN
SELECT * From tab
If not FOUND then
RAISE EXCEPTION 'An error - % ', SQLERRM USING ERRCODE = SQLSTATE;
end if;
END;
FEHLER: Spalte »sqlstate« existiert nicht
LINE 1: SELECT SQLSTATE
Dieser Link hilft mir nicht! Ich weiß, dass SQLSTATE schon vordefiniert ist, aber meine Datenbanksystem scheint es nicht zu wiesen. Wie kann ich das Problem lösen?