Kann jemand erklären, warum wir Pragma Ausnahme Init brauchen. Wir haben eine benutzerdefinierte Ausnahme, die den gleichen Job wie Pragma ausführt. Ihre Antwort wird geschätzt.Welche Situation können wir für Pragma_exception_init gehen
Antwort
pragma exception_init wird verwendet, um einer Ausnahmebedingung einen Namen zu geben, so dass Sie im Exception-Handler auf die Ausnahme mit diesem Namen verweisen können. Nur einige der mehreren tausend Oracle-Ausnahmen haben vordefinierte Namen. Sie können exception_init verwenden, um Namen für diese anderen Ausnahmen zu erstellen.
siehe https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#BABGIIBI
Ich bearbeite meine Antwort, weil ich hier formatierten Text einfügen können. In Ihrem Beispiel definieren Sie eine Ausnahme, die Sie werfen, aber was ist, wenn Sie eine bestehende Ausnahme abfangen wollen, die das System wirft, aber unbenannt ist? Im folgenden Beispiel behandle ich zwei spezifische Fehler 'DATA_NOT_FOUND' und ORA-600, was ein Systemfehler ist (und ja, ich habe einen Code, der diese bekommt).
CREATE OR REPLACE PROCEDURE exception_init_demo
AS
l_routine VARCHAR2 (30) := $$plsql_unit;
severe_system_error EXCEPTION;
PRAGMA EXCEPTION_INIT (severe_system_error, -600);
BEGIN
-- Execution code goes here
NULL;
EXCEPTION
WHEN severe_system_error
THEN
-- Severe error, log it, notify the dba, re-raise the exception
log_error (
p_application => $$plsql_unit
, p_routine => l_routine
, p_message => SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace()
);
notify_dba;
RAISE;
WHEN NO_DATA_FOUND
THEN
-- No data was found, this is OK, ignore error and return
return;
WHEN OTHERS
THEN
-- all other errors we will log and re-raise
log_error (
p_application => $$plsql_unit
, p_routine => l_routine
, p_message => SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace()
);
RAISE;
END;
- 1. Welche Datenstruktur ist für diese Situation geeignet?
- 2. Welche Mindestauflösung können wir für webrtc-Video festlegen?
- 3. Welche Art von Laufzeitoptimierungen gehen verloren, wenn wir Reflexion
- 4. Sollten wir Open-Source gehen?
- 5. Können wir Semaphore für mehrere Bedingungen erstellen
- 6. Können wir arduino.getKey() für Tastaturereignisse verwenden?
- 7. In welcher Situation müssen wir `multiprocessing.Pool.imap_unordered` verwenden?
- 8. Welche Muster soll ich für diese Situation verwenden?
- 9. Welche addTarget-Aktionen können wir auf UITextView anwenden?
- 10. Welche Art von Projektprüfung können wir mit JMeter durchführen?
- 11. Welche Arten von Objekten können wir im Ansichtszustand platzieren?
- 12. Können wir erkennen, welche iOS-Anwendung meine benutzerdefinierte Tastatur verwendet?
- 13. Vuex | Welche Optionen können wir an die Commit-Methode übergeben?
- 14. Anders als SQL, welche Datenbank können wir in Android verwenden?
- 15. Welche libiconv sollten wir für iOS verwenden?
- 16. Für Textbox können wir Dateipfad Validierung haben?
- 17. Können wir NDEBUG für Assemblydateien verwenden?
- 18. Können wir eine Aktualisierungsrate für SignalR einstellen?
- 19. Können wir Transaktionen für C# -Objekte implementieren?
- 20. Können wir Komponententest für AngularJS routeProvider schreiben?
- 21. Können wir Komponententest für AngularJS routeProvider schreiben?
- 22. können wir verwenden UIImagePickerController für Landschafts iPad
- 23. Können wir scroll-Ereignis für Div verwenden?
- 24. Können wir die Adresse für Stringliteral ausdrucken?
- 25. können wir Festplattenspeicher für JVM-Speicher verwenden
- 26. Können wir Listenansicht für heterogene Sammlungen verwenden
- 27. Welche Dateien können iOS-Apps verwenden?
- 28. Wie sollte ich diese Situation in FireBase behandeln, wo zwei Benutzer für den gleichen Datenbankschlüssel gehen
- 29. Welcher Oauth2 fließt für diese spezielle Situation?
- 30. Entscheiden, welche Changesets in Jenkins Build gehen
für ex: erstellen oder ersetzen Verfahren proc_pragma_demo als I Nummer: = 1; i_greater_than_zero Ausnahme; pragma exception_init (i_greater_than_zero, -1234); Beginne wenn (i> 0) dann erhöhe i_greater_than_zero; Ende wenn; Ausnahme wenn i_greater_than_zero dann dbms_output.put_line ('i Wert ist größer als Null:'); Ende; Im obigen Beispiel, auch wenn wir das Pragma nicht haben, macht es den gleichen Job. Welche Bedeutung hat Pragma? –
Vielen Dank, Brian. Ich habe verstanden. –