2016-02-12 66 views
-3
create or replace procedure "PROC_UPDATE_SALARY" 
    (p_ename IN VARCHAR2, p_salary_increase IN VARCHAR2) 
is  

begin 
v_new_salary lab01_sample_emp.sal TYPE; 

     UPDATE LAB01_SAMPLE_EMP 
      SET SAL = SAL + p_salary_increase 
     WHERE ENAME = p_ename 
    RETURNING SAL INTO v_new_salary; 

commit; 

dbms_output.put_line('INCREASED SALARY FOR: ' || p_ename || 
    ' TO THE NEW AMOUNT OF: $ ' || to_char(v_new_salary)); 

end; 

回答

0

所有变量需要在begin部分之前声明。

我还建议将第二个参数更改为数字。这将使您的声明更加清晰,并避免Oracle在执行时必须在update语句中执行隐式转换。

create or replace procedure PROC_UPDATE_SALARY 
    -- Use number data type to move data validation to the 
    -- procedure call and avoid implicit conversion. 
    -- (p_ename IN VARCHAR2, p_salary_increase IN VARCHAR2) 
    (p_ename IN VARCHAR2, p_salary_increase IN NUMBER) 
is  
    -- Declaration section 
    v_new_salary lab01_sample_emp.sal%TYPE; 
begin 
    -- Execution section 
    UPDATE LAB01_SAMPLE_EMP 
    SET SAL = SAL + p_salary_increase 
    WHERE ENAME = p_ename 
    RETURNING SAL INTO v_new_salary; 

    commit; 

    dbms_output.put_line('INCREASED SALARY FOR: ' 
         || p_ename 
         || ' TO THE NEW AMOUNT OF: $ ' 
         || to_char(v_new_salary)); 

end; 
/