2010-05-10 2 views

Répondre

0

L'affichage de votre exception avec votre question nous donnerait une meilleure idée de ce à quoi vous êtes confronté.

Généralement, une exception vous indique le package et le numéro de ligne dans le message d'erreur. A partir de cela, vous pouvez interroger la table USER_SOURCE:

SELECT text 
FROM user_source 
WHERE type = 'PACKAGE BODY' 
    AND name = 'myProcName' 
    AND line = [the line number]; 

Il pourrait être utile de savoir plus sur le contexte dans lequel l'erreur a été déclenchée. Pour cela, vous pouvez utiliser le `ENTRE » opérateur:

SELECT text 
FROM user_source 
WHERE type = 'PACKAGE BODY' 
    AND name = 'myProcName' 
    AND line BETWEEN [the line number - 5] AND [the line number +5]; 
+0

En fait, je voulais trouver le nom de la procédure et le numéro de ligne à partir de laquelle l'erreur est à venir. La requête fournie par vous n'est utile que lorsque vous connaissez le nom de la procédure. – bhagwat

+0

Merci j'ai eu la réponse – bhagwat

+2

@bhagwat - si vous avez trouvé une réponse, postez-la ici à SO. Soyez un enseignant aussi bien qu'étudiant. – APC

1

Pour la postérité, voici la solution OP trouvée:

ok sous forme d2k il y a un déclencheur SI ERREUR où vous pouvez utiliser la fonction DBMS_ERROR_TEXT pour obtenir la procédure, ligne de nom du package numéro de la déclaration d'où l'erreur vient

1

Je suis venu dans ce modèle après beaucoup de recherches, se cogner la tête et des grincements de dents:

CREATE OR REPLACE PACKAGE BODY my_schema.package_name 
IS 

    PROCEDURE foo 
    IS 
    BEGIN 
    -- Call stored procedures/functions that throw unhandled exceptions 
    EXCEPTION 
    WHEN OTHERS THEN 
     DBMS_OUTPUT.PUT_LINE('ERROR! - ' 
     || DBMS_UTILITY.FORMAT_ERROR_STACK 
     || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); 
    END foo; 

END; 

La fonction DBMS_UTILITY.FORMAT_ERROR_STACK semble donner le code d'erreur et le message et DBMS_UTILITY.FORMAT_ERROR_BACKTRACE semble donner une honnête trace de la pile de bonté, avec les numéros de ligne et les noms des procédures stockées dans Oracle 10g au moins.

Je ne suis pas sûr si ces fonctions sont disponibles dans Oracle 9i. Je ne pouvais pas trouver beaucoup d'informations sur ce genre de chose, même pour Oracle 10g, alors j'ai pensé que je publierais au moins cette réponse car 9i est assez vieux (et donc 10g d'ailleurs).

Questions connexes