2010-11-13 5 views
3

J'ai besoin d'un exemple de création d'un fichier journal d'erreurs pour une procédure stockée dans Oracle. s'il vous plaît donnez-moi un exemple avec la création de table et la création de procédure stockée et la création de journal des erreurs.Comment créer un journal des erreurs pour la procédure stockée dans Oracle 10g?

Merci à l'avance

EDIT (Infodesks d'autres questions)

Supposons qu'il y ait une procédure stockée. Lorsque j'exécute cette procédure stockée, une erreur ou une exception attendue peut se produire. J'ai donc besoin de créer une table de consignation des erreurs dans laquelle toutes les erreurs seront automatiquement enregistrées chaque fois que j'exécuterai la procédure stockée. Par exemple, s'il existe une colonne qui n'autorise pas les valeurs nulles, mais que l'utilisateur entre des valeurs nulles, cette erreur doit être générée et stockée dans la table des erreurs.

+0

Voir aussi [cette réponse à une question similaire] (http: // stackoverflow. com/questions/1081297/quoi-est-un-efficace-chemin-identifier-et-rapport-chaque-erreur-message-rais/1081941 # 1081941) –

Répondre

5

Vous avez pas vraiment donné beaucoup de détails sur vos besoins. Voici une simple table de journal d'erreurs et une procédure pour enregistrer les messages d'erreur dans le:

CREATE TABLE error_log (ts TIMESTAMP NOT NULL, msg VARCHAR2(4000)); 

CREATE PROCEDURE log_error (msg IN VARCHAR2) IS 
BEGIN 
    INSERT INTO error_log (ts, msg) 
    VALUES (SYSTIMESTAMP, SUBSTR(insert_log.msg, 1, 4000)); 
END log_error; 

Vous pourriez ou peut-être pas besoin d'être une opération autonome. Cela dépend si vous souhaitez que le journal enregistre les erreurs des procédures qui annulent leurs modifications.

Généralement, cela sera implémenté dans un système de journalisation plus générique qui consignerait non seulement les erreurs, mais aussi les avertissements et les informations de débogage. Si vous voulez une instruction DML (insérer/mettre à jour/supprimer) pour enregistrer une erreur pour chaque ligne (au lieu de simplement échouer sur la première ligne d'erreurs), vous pouvez utiliser la clause LOG ERRORS au lieu de l'échec de l'instruction, l'instruction réussira et les lignes qui n'ont pas été insérées/mises à jour/supprimées seront écrites dans la table de journal des erreurs spécifiée, avec le code d'erreur et le message d'erreur applicables. Reportez-vous au lien fourni par vettipayyan.

Si vous voulez que toutes les exceptions qui sont soulevées dans une procédure à être connecté, vous pouvez les attraper avec QUAND LES AUTRES:

BEGIN 
    -- your code here 
EXCEPTION 
    WHEN OTHERS THEN 
    log_error(DBMS_UTILITY.format_error_stack); 
    log_error(DBMS_UTILITY.format_error_backtrace); 
    RAISE; 
END; 
+1

+1, essentiellement la même chose que j'ai fait maintes et maintes fois. Regarde certainement les transactions autonomes - la plupart du temps vous voulez l'entrée de journal ESPECIALEMENT quand vous frappez une erreur qui annule tout! – DCookie

Questions connexes