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