2016-02-12 50 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; 
/