2014-10-16 75 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',但是你沒有在任何地方定義它。它從何而來? – 2014-10-16 15:37:58

+0

那麼,在方法中添加p_salary不會再顯示問題。謝謝 – KPavezC 2014-10-23 05:34:55

回答

1

您需要將p_salary傳遞到您的crea_empleado()過程中。 p_department_id在那裏,但沒有p_salary。

相關問題