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 显示变化前后的工资的主要内容,如果未能解决你的问题,请参考以下文章