2014-10-16 4 views
-1

У меня есть следующие функции в теле пакета:«Идентификатор должен быть объявлен» при использовании функции

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: Заявление игнорировали и PLS-00201: идентификатор 'P_SALARY' должен быть объявлен

Но я не вижу ошибки в моей функции, поэтому я не понимаю, почему она показывает эти ошибки. Заранее благодарим за помощь

+1

Точно, как говорится. Вы используете 'p_salary', но вы не определяете его нигде. От куда это? –

+0

Ну, добавление p_salary в метод больше не вызывает проблем. спасибо – KPavezC

ответ

1

Вам необходимо передать p_salary в процедуру crea_empleado(). p_department_id есть, но нет p_salary.

Смежные вопросы