【问题标题】:PL/SQL Display salary before and after changePL/SQL 显示变化前后的工资
【发布时间】:2015-08-21 21:55:42
【问题描述】:

我想编写一个 PL/SQL 块来打印更改前后两个员工的员工编号和薪水。

请指教

cursor cur is select employees.employee_ID, employees.salary
from employees
where employees.employee_ID=&employee_ID
AND employees.salary= employees.salary

sal number;
emp_ID number(10);

introduction clob;
begin
open cur;
loop
fetch cur into sal,emp_ID;
exit when cur>=2;

introduction := '  Display the Employees_ID and Salary before and after change.';
dbms_output.put_line(introduction);
DBMS_OUTPUT.PUT_LINE('employee_id =' || emp_ID);
DBMS_OUTPUT.PUT_LINE('Salary =' || Sal);

end loop;
close cur;
END;

【问题讨论】:

  • 这似乎与您所做的非常相似 in your previous question。您尝试了哪些方法,在调整时遇到了哪些问题?
  • 尝试过光标,但对我来说效果不佳
  • 请编辑您的问题以显示您尝试过的内容以及为什么它不起作用。如果你有错误然后显示那些,如果它给出了错误的结果显示你得到了什么和你期望什么。我们无法从头开始为您编写全部内容。
  • 问题已用我的代码更新..请告知

标签: database oracle stored-procedures plsql cursor


【解决方案1】:

您需要在 Employee 表中创建一个新列,并用它来存储旧工资。

您还需要 Salary 列的插入和更新触发器,以将当前值存储在您之前刚刚添加的新列中。

现在您只需要从员工表中进行简单的选择即可完成这项工作。

由于我不知道您的表架构,因此我无法为您提供 pl/sql 代码,但如果您需要代码,请告诉我并写下存储员工和薪水列的表的名称。

希望对你有帮助 伊曼

【讨论】:

  • 我认为 OP 只想显示前后值,而不是将两者都存储在表中。
  • 我已经用我的尝试更新了这个问题..请告知...我需要在更改之前和更改之后显示薪水
  • Alex,我相信Chaz必须把它们存储起来,否则他能做的不多,我们说的是数据库,逻辑恰好在数据库层和应用程序逻辑中实现。
  • 别无他法,你必须存储旧值。如果有人知道如何在不存储旧的情况下做到这一点,我将有兴趣学习。但是由于您需要编写两个值(新工资和旧工资),因此您要么需要在更改时间进行打印,并且您不能随时进行打印,因为旧的不存在,但是如果您可以实现时间模型,您将能够这样做,但在这种情况下,您仍然需要将旧工资保存在某个地方。
  • 您的代码仅在您对每个员工有多个记录时才有效,例如,如果每个薪水存在一个记录,如果是这种情况并且您在相关记录中拥有所有付款,您的代码将工作,但总是会打印第一个更改,如果您有一个 esch 员工的记录,正如我所看到的那样,您的代码将永远不会完成并且您只是编写了一个无限循环,因为您不会有两个光标用于单个员工,你的代码挂了吗?
【解决方案2】:

这可以通过触发器简单地完成。

create or replace trigger printSal
  before update or insert on employees  
  for each row

declare

begin
  dbms_output.put_line('employee_id =' || emp_ID || ' New Sal=' ||:new.sal|| ' Old Sal=' || :old.sal);
  -- or you can insert these values into another table.
end printSal;

【讨论】:

    猜你喜欢
    • 2016-09-19
    • 2018-10-31
    • 2019-05-30
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多