2010-05-10 23 views

回答

0

用你的問題發佈你的異常會給我們一個更好的想法,你會遇到什麼。

通常,一個例外會告訴你錯誤信息中的包和行號。從這裏,您可以查詢USER_SOURCE表:

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

瞭解更多關於觸發錯誤的上下文可能很有用。對於您可以使用'」之間的操作:

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

實際上我想找出錯誤發生的過程和行號的名稱。只有當您知道過程名稱,包裝名稱時,您提供的查詢纔有用。 – bhagwat 2010-05-10 12:07:45

+0

謝謝我得到了答案 – bhagwat 2010-05-10 12:52:28

+2

@bhagwat - 如果你找到了答案,然後把它張貼在這裏。既是老師,又是學生。 – APC 2010-05-10 14:24:41

1

對於後人,這裏是解決方案的OP發現:

在D2K形式確定有一個ON誤差觸發,你可以使用功能DBMS_ERROR_TEXT擺脫語句的過程中,包名行號錯誤來了

1

我遇到這種模式經過反覆研究,撞頭和咬牙切齒:

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; 

DBMS_UTILITY.FORMAT_ERROR_STACK功能似乎給錯誤代碼和消息,並且DBMS_UTILITY.FORMAT_ERROR_BACKTRACE似乎給一個誠實善良棧跟蹤條件,且在至少Oracle 10g的行號和存儲的過程的名稱。

我不確定Oracle 9i中是否提供了這些功能。即使對於Oracle 10g,我也找不到有關此類信息的很多信息,所以我認爲我至少會發布這樣的答案,因爲9i已經很老了(所以對於這個問題它就是10g)。

相關問題