"必须声明标识符"使用功能时

时间:2014-10-16 15:33:11

标签: plsql exception-handling

我在包体中有以下功能:

    FUNCTION valida_salario(p_salary IN employees.salary%TYPE, 
                        p_department_id IN employees.department_id%TYPE) 
RETURN BOOLEAN IS
    v_prom_depto NUMBER;
    v_var_depto  NUMBER;
BEGIN
    SELECT AVG(salary), VARIANCE(SALARY) INTO v_prom_depto, v_var_depto
    FROM employees
    WHERE department_id=p_department_id;
  --  GROUP BY department_id;

    IF p_salary < v_prom_depto + 3* sqrt(v_var_depto) THEN
       RETURN TRUE;
    ELSE
       RETURN FALSE;
    END IF;
EXCEPTION
    WHEN OTHERS THEN
    dbms_output.put_line(SQLERRM);
END valida_salario;

当我在存储过程中使用该函数时(该过程也在正文中),它会显示错误:

PROCEDURE crea_empleado(p_last_name IN employees.last_name%TYPE, 
                        p_first_name IN employees.first_name%TYPE, 
                        p_email IN employees.email%TYPE, 
                        p_hire_date IN employees.hire_date%TYPE, 
                        p_job_id IN employees.job_id%TYPE,
                        p_department_id IN employees.department_id%TYPE
                                   DEFAULT 80,
                        p_resultado OUT NUMBER) AS
e_salario_no_valido EXCEPTION;
BEGIN

    IF valida_salario(p_salary, p_department_id) THEN // Here is located the errors
        NULL;
    ELSE
        RAISE e_salario_no_valido;
    END IF;

    INSERT INTO employees(employee_id, last_name, first_name, email, hire_date, job_id)
    VALUES (emp_seq.NEXTVAL, p_last_name, p_first_name, p_email, p_hire_date, p_job_id);

EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
        p_resultado := 2;
        dbms_output.put_line('Datos duplicados');
    WHEN e_salario_no_valido THEN
        p_resultado := 1;
    WHEN OTHERS THEN
        dbms_output.put_line(SQLERRM);
    ROLLBACK;
END crea_empleado;

以下错误包括:

PL/SQL: Statement ignored and 
PLS-00201: the identifier 'P_SALARY' must be declared

但是我看不到函数中的错误,所以我不明白为什么它会显示这些错误。 在此先感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您需要将p_salary传递给crea_empleado()过程。 p_department_id在那里,但没有p_salary。