我想创建一个返回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分支推荐一个测试用例吗?
谢谢,
答案 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;
祝你好运。