ORACLE APEX编译失败错误

时间:2016-02-12 23:22:15

标签: oracle plsql oracle-apex

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;

1 个答案:

答案 0 :(得分: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;
/