为啥在我的程序中没有打印更新的正确值?

Posted

技术标签:

【中文标题】为啥在我的程序中没有打印更新的正确值?【英文标题】:Why in my Procedure is not printing the correct value updated?为什么在我的程序中没有打印更新的正确值? 【发布时间】:2020-04-21 02:14:27 【问题描述】:

这是我的测试代码:

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; 

当我运行程序并打印以查看输出时,我们会看到更新前的结果: enter image description here

当我选择表Employees时看到该用户的薪水已经更新:

enter image description here

【问题讨论】:

编辑您的问题,并包含您在 EMPLOYEES 表中获得的数据,以及显示您如何调用此过程的测试工具以及您的结果'得到。基于this db<>fiddle,我不得不说您的程序运行良好。 【参考方案1】:

因为您没有打印更新的值,所以您正在打印选定的值。您的更新更改了数据库中薪水的值,它不会更改选择的变量。您需要更新语句的return 子句。此外,您无需选择;这可以在单个语句中完成,除了设置变量和实际打印。

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; 

【讨论】:

以上是关于为啥在我的程序中没有打印更新的正确值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的数据没有在我的 SQLAlchemy 模型中正确表示?

为啥当上下文值更新时我的上下文没有更新?

为啥我的 MSDTC 事务没有在我的 localhost 环境中正确回滚?

我的ASP.NET 程序点击按钮为啥没有反应?

为啥我的视图没有更新我发布的变量?

有没有办法在我的基于 django 的应用程序上打印字典键和相应的值列表?