ORACLE FUNCTION测试用例

时间:2016-12-18 12:35:09

标签: oracle function exception plsql exception-handling

我想创建一个返回BOOLEAN的函数。 该函数将检查是否存在值(如果某个部门已存在,则为经典验证)。

我实现了NO_DATA_FOUND异常,我也希望添加WHEN OTHERS;但我不记得任何测试用例。

以下是该函数的代码:

FUNCTION fnc_department_exists(p_dept_name  hr.departments.department_name%TYPE) RETURN BOOLEAN IS
    v_dummy   PLS_INTEGER;
BEGIN
    -- Verifica existenta unui anumit departament
    pkg_logging.prc_log('HR', 'VERIFIC', 'Verifica daca exista departamentul "' || p_dept_name || '"');
    SELECT  1 
    INTO    v_dummy
    FROM    hr.departments
    WHERE   UPPER(department_name) = UPPER(p_dept_name);

    pkg_logging.prc_log('HR', 'VERIFIC', 'Departamentul "' || p_dept_name || '" exista');

    RETURN TRUE;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        pkg_logging.prc_log('HR', 'VERIFIC', 'Departamentul "' || p_dept_name || '" nu exista');
        RETURN FALSE;
    WHEN OTHERS THEN
        pkg_logging.prc_log('HR', 'VERIFIC', 'A aparut o alta eroare: ' || SQLCODE || ' - ' || SQLERRM);
        RETURN FALSE;
END fnc_department_exists;

有人可以为WHEN OTHERS分支推荐一个测试用例吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

如果你有一个名为eg的部门'PAYROLL',添加另一个名为'Payroll',另一个名为'payroll'。这将导致SELECT失败并出现ORA-01422(TOO_MANY_ROWS)异常。

我建议当你的代码进入WHEN OTHERS块时,你应该重新引发异常,而不是吃它并返回false。因此:

WHEN OTHERS THEN
  pkg_logging.prc_log('HR', 'VERIFIC', 'A aparut o alta eroare: ' ||
                      SQLCODE || ' - ' || SQLERRM);
  RAISE;

祝你好运。