如何在Crystal Reports中显示存储过程中的异常消息?

时间:2012-11-21 09:33:23

标签: crystal-reports oracle10g oracle-xe

我有一个Crystal Report应用程序,它使用Oracle的存储过程(我正在使用Oracle 10g Express Edition)。截至目前,当从存储过程抛出异常(例如“除以零”异常)时,消息将显示在CR中的警告框中。我想在报告中显示它,而不是数据。有没有办法做到这一点?

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

这就是我从存储过程中抛出异常的方法。然后我用Data Expert绑定了存储过程。我使用REF CURSOR将值从存储过程返回到Crystal Report。

提前致谢。

1 个答案:

答案 0 :(得分: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;
/