TOAD-Version: 8.0.0.47
Im TOAD-Debugger tritt ein Fehler (undeclared identifier) auf, wenn eine Varchar2-Variable mehr als 999 Zeichen enthält und man diese direkt oder mit Watches beobachtet.
Der Code läuft völlig problemlos solange man die Variablen nicht beobachtet.
Eine Lösung zu diesem Problem habe ich noch nicht gefunden.
1.25.2008
Benutzerdefinierter Fehler beendet Ausführung und gibt dennoch Meldung aus
Die Anweisung
raise_application_error (-20002, 'do_mcontract2baan - Kein Kundencursor geöffnet!');
erzeugt eine Fehlermeldung. Der Code wird dann nach dieser Meldung fortgesetzt.
Verwendet man
EXCEPTION WHEN others
THEN
so wird zwar die Bearbeitung beendet, aber leider auch die Meldung geschluckt.
Die Lösung:
Es wird ein eigener Fehler im PACKAGE definiert:
Fehler_Als_Meldung EXCEPTION;
und diesem dann die gewünschte Fehlernummer zugewiesen:
PRAGMA EXCEPTION_INIT (Fehler_Als_Meldung, -20002);
und eine Behandlungroutine wie folgt implementiert:
EXCEPTIONWHEN fehler_als_meldung
THEN
raise_application_error (-20003, SQLERRM);
Und schon wird die Ausführung des Code unterbrochen und die Meldung ausgegeben!
raise_application_error (-20002, 'do_mcontract2baan - Kein Kundencursor geöffnet!');
erzeugt eine Fehlermeldung. Der Code wird dann nach dieser Meldung fortgesetzt.
Verwendet man
EXCEPTION WHEN others
THEN
so wird zwar die Bearbeitung beendet, aber leider auch die Meldung geschluckt.
Die Lösung:
Es wird ein eigener Fehler im PACKAGE definiert:
Fehler_Als_Meldung EXCEPTION;
und diesem dann die gewünschte Fehlernummer zugewiesen:
PRAGMA EXCEPTION_INIT (Fehler_Als_Meldung, -20002);
und eine Behandlungroutine wie folgt implementiert:
EXCEPTIONWHEN fehler_als_meldung
THEN
raise_application_error (-20003, SQLERRM);
Und schon wird die Ausführung des Code unterbrochen und die Meldung ausgegeben!
1.18.2008
Native Dynamic SQL
1.11.2008
n Werte in einer Spalte verknüpft
Immer wieder möchte man die Werte eines Feldes aus n Datensätzen in einem Feld wiederbekommen.
Hier die Function dafür:
Hier die Function dafür:
Und hier weniger schön formatiert zum rauskopieren:
CREATE OR REPLACE FUNCTION rowconcat(q in VARCHAR2) RETURN VARCHAR2 IS
ret VARCHAR2(4000);
hold VARCHAR2(4000);
cur sys_refcursor;
BEGIN
OPEN cur FOR q;
LOOP
FETCH cur INTO hold;
EXIT WHEN cur%NOTFOUND;
IF ret IS NULL THEN
ret := hold;
ELSE
ret := ret '; ' hold;
END IF;
END LOOP;
RETURN ret;
END;
/
CREATE OR REPLACE FUNCTION rowconcat(q in VARCHAR2) RETURN VARCHAR2 IS
ret VARCHAR2(4000);
hold VARCHAR2(4000);
cur sys_refcursor;
BEGIN
OPEN cur FOR q;
LOOP
FETCH cur INTO hold;
EXIT WHEN cur%NOTFOUND;
IF ret IS NULL THEN
ret := hold;
ELSE
ret := ret '; ' hold;
END IF;
END LOOP;
RETURN ret;
END;
/
Abonnieren
Posts (Atom)