2012-04-13 53 views
2

我正在處理一個重載的包,並想知道2件事情。處理重載包時拋出「解析對象細節失敗」

1)有沒有辦法獲得有關發生錯誤的更多信息,如發生什麼行號,因爲Failed to resolve object details接縫有點模糊。

2)該陳述出現什麼問題?

CREATE OR REPLACE PACKAGE shop_query_pkg IS 
    procedure shop_info 
     (p_id IN bb_shopper.idshopper%TYPE, 
     p_firstname out bb_shopper.firstname%TYPE); 
     procedure shop_info 
     (p_id IN bb_shopper.lastname%TYPE, 
     p_firstname out bb_shopper.firstname%TYPE); 
    END; 
    /
    CREATE OR REPLACE PACKAGE BODY show_query_pkg IS 
    procedure shop_info 
     (p_id IN bb_shopper.idshopper%TYPE, 
     p_firstname out bb_shopper.firstname%TYPE); 
     IS 
    BEGIN 
     SELECT firstname 
     into p_firstname 
     FROM bb_shopper 
     WHERE idshopper = p_id; 
    EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
     DBMS_OUTPUT.PUT_LINE('ID does not exist'); 
    END; 
    -- second procedure 
    procedure shop_info 
     (p_id IN bb_shopper.lastname%TYPE, 
     p_firstname out bb_shopper.firstname%TYPE); 
     IS 
    BEGIN 
     SELECT firstname 
     into p_firstname 
     FROM bb_shopper 
     WHERE lastname = p_id; 
    EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
     DBMS_OUTPUT.PUT_LINE('Last name does not exist'); 
    END; 
    END; 
    /
    show errors; 

錯誤

PACKAGE shop_query_pkg compiled 
PACKAGE BODY show_query_pkg compiled 
Warning: execution completed with warning 
Failed to resolve object details 

回答

0

你不能在超負荷過程 使用相同的名稱和相同數量的相同類型的參數,也有包體名稱錯誤 等小錯誤是有

另外第一個和第二個程序 參數p_firstname類型p_firstname out bb_shopper.firstname%TYPE和bb_shopper.firstname%TYPE都是型的人物(兩個都CHAR或BOTH VARCHAR2等) ,因此不能算作不同類型

請使用以下

CREATE OR REPLACE PACKAGE shop_query_pkg IS 
     procedure shop_info(p_id1  IN bb_shopper.idshopper%TYPE, 
        p_firstname1 out bb_shopper.firstname%TYPE); 
     procedure shop_info(p_id2  IN bb_shopper.lastname%TYPE, 
        p_firstname2 out bb_shopper.firstname%TYPE); 
END; 
/
CREATE OR REPLACE PACKAGE BODY shop_query_pkg IS 
    procedure shop_info(p_id1 IN bb_shopper.idshopper%TYPE, 
            p_firstname1 out bb_shopper.firstname%TYPE) 
       IS 
     BEGIN 
      SELECT firstname into p_firstname1 FROM bb_shopper WHERE idshopper = p_id1; 
     EXCEPTION 
     WHEN NO_DATA_FOUND 
     THEN 
      DBMS_OUTPUT.PUT_LINE('ID does not exist'); 
     END; -- second procedure  
    procedure shop_info(p_id2 IN bb_shopper.lastname%TYPE, 
            p_firstname2 out bb_shopper.firstname%TYPE) 
       IS 
     BEGIN 
      SELECT firstname into p_firstname2 FROM bb_shopper WHERE lastname = p_id2; 
     EXCEPTION 
     WHEN NO_DATA_FOUND 
     THEN 
      DBMS_OUTPUT.PUT_LINE('Last name does not exist'); 
     END; 
END; 
/
show errors; 
+0

@atrueresistance 對於您的第一個問題,您可以在同一模式中使用視圖user_errors獲取行號,位置和文本等所有信息 – psaraj12 2012-04-13 03:19:32

+1

只要您在重載過程定義中使用相同數量的參數和名稱至少有一個參數的類型是不同的。 – Andrew 2012-04-13 07:54:07

+0

謝謝安德魯,會糾正我的錯誤 – psaraj12 2012-04-13 09:06:15

0

創建一個從APPS在不同的模式中的包,不產生代名詞在APPS。

如果軟件包在編譯時出現錯誤,如果您試圖使用'show error'查看錯誤消息,則會顯示消息爲'無法解析對象詳細信息',因爲軟件包或同義詞在APPS中不可用架構。

0

檢查您試圖編譯的軟件包的軟件包規範是否有效。我建議你再次編譯包規範,然後編譯包體。這已經解決了我的問題。