2012-11-21 32 views
0

我有一個使用Crystal報表的應用程序,它使用Oracle的存儲過程(我正在使用Oracle 10g Express Edition)。截至目前,當存儲過程拋出異常時,例如說'除以零'異常,則該消息顯示在CR中的警告框中。我想在報告中顯示它,而不是數據。有什麼辦法可以做到嗎?如何在Crystal Reports中顯示來自存儲過程的異常消息?

EXCEPTION 
    WHEN ZERO_DIVIDE THEN 
     raise_application_error(-20001, 'Division by zero exception'); 

這就是我如何從存儲過程拋出異常。然後我用Data Expert綁定存儲過程。我使用REF CURSOR將存儲過程的值返回給Crystal Report。

在此先感謝。

+0

在Crystal Reports中有沒有辦法捕獲SQL異常?如果是這樣,你可以得到SQL錯誤代碼,並根據錯誤代碼,你可以顯示你想要的消息。 – user75ponic

回答

0

在Crystal Reports中有沒有辦法捕捉SQL異常?如果是這樣,你可以得到SQL錯誤代碼,並根據錯誤代碼,你可以顯示你想要的消息。

如果不是,請嘗試以下方法,即在引發異常時返回錯誤代碼和錯誤消息。

CREATE OR REPLACE PROCEDURE getemployees (
    p_no     IN  employees.emp_number%TYPE, 
    rcursor    OUT sys_refcursor, 
    return_message OUT VARCHAR2, 
    return_code   OUT NUMBER 
) 
AS 
BEGIN 
    OPEN rcursor FOR 
     SELECT * 
      FROM employees 
     WHERE emp_number = p_no; 

    return_message := NULL; 
    return_code := 0; 
EXCEPTION 
    WHEN ZERO_DIVIDE 
    THEN 
     return_message := SQLERRM; 
     return_code := SQLCODE; 
END getemployees; 
/
相關問題