PL/SQL 显示变化前后的工资

Posted

技术标签:

【中文标题】PL/SQL 显示变化前后的工资【英文标题】:PL/SQL Display salary before and after change 【发布时间】: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。您尝试了哪些方法,在调整时遇到了哪些问题? 尝试过光标,但对我来说效果不佳 请编辑您的问题以显示您尝试过的内容以及为什么它不起作用。如果你有错误然后显示那些,如果它给出了错误的结果显示你得到了什么和你期望什么。我们无法从头开始为您编写全部内容。 问题已用我的代码更新..请告知 【参考方案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;

【讨论】:

以上是关于PL/SQL 显示变化前后的工资的主要内容,如果未能解决你的问题,请参考以下文章

实验七:PL/SQL编程基础

创建一个PL/SQL块,计算一年的补偿金额。

PL/SQL 函数查看最高工资

在 PL/SQL 中显示函数

如何在pl-sql中修复此功能

PL/SQL - 精确提取返回超过请求的行数