Почему в моей процедуре не печатается правильное значение обновлено? - PullRequest
0 голосов
/ 21 апреля 2020

Вот мой код для теста:

PROCEDURE INCREASE(p_employee in number)
is
  V_salary   employees.salary%type;
BEGIN

  Select  salary into v_salary
  From employees where  employee_id = p_employee;

  if v_salary >= 15000 then
  Update employees set salary  =  v_salary + ((v_salary * 20)/100)  Where employee_id = p_employee;
    else 
    Update employees set salary  =  v_salary + ((v_salary * 10)/100)  Where employee_id = p_employee;

 end if;
 commit;


  DBMS_OUTPUT.PUT_LINE('Name: ' || v_name || '  ' || 'salary: ' || v_salary );
End; 

Когда я запускаю процедуру и печатаю, чтобы увидеть вывод, мы видим результат перед обновлением: введите описание изображения здесь

Когда я вижу, что зарплата для этого пользователя уже обновляется, когда я выбираю таблицу Сотрудники:

введите описание изображения здесь

1 Ответ

1 голос
/ 21 апреля 2020

Поскольку вы не печатаете обновленное значение, вы печатаете выбранное значение. Ваше обновление изменяет значение зарплаты в базе данных, оно НЕ меняет выбранную переменную на. Вам необходимо вернуть предложение оператора update. Более того, вам не нужно выбирать; это можно сделать одним оператором, за исключением настройки переменной и фактической печати. ​​

create or replace procedure increase(p_employee in number)
is
  v_salary   employees.salary%type;
begin

  update employees 
     set salary  =  case when salary >= 15000
                         then 1.2 * salary
                         else 1.1 * salary
                    end   
    where employee_id = p_employee
    return salary into v_salary; 

  commit;
  dbms_output.put_line('mesalao: ' || v_salary );
end; 
...