Oracle PLSQL获取未退出
让此员工表: 和plsql查询:Oracle PLSQL获取未退出,oracle,plsql,Oracle,Plsql,让此员工表: 和plsql查询: DECLARE totaal_salaris INT := 0; CURSOR medewerker_cur IS SELECT naam, maandsal FROM MEDEWERKERS; medewerker_row medewerker_cur%rowtype; BEGIN OPEN medewerker_cur; LOOP FETCH medewerke
DECLARE
totaal_salaris INT := 0;
CURSOR medewerker_cur IS
SELECT naam, maandsal
FROM MEDEWERKERS;
medewerker_row medewerker_cur%rowtype;
BEGIN
OPEN medewerker_cur;
LOOP
FETCH medewerker_cur INTO medewerker_row;
EXIT WHEN medewerker_cur%NOTFOUND OR totaal_salaris > 50000;
UPDATE medewerkers
SET maandsal = (medewerker_row.maandsal * 1.10)
WHERE naam = medewerker_row.naam;
totaal_salaris := totaal_salaris + medewerker_row.maandsal;
END LOOP;
dbms_output.put_line('Totaal uit te keren salaris: ' || totaal_salaris);
END;
/
其目的是将所有现有员工的工资(maandsal)提高10%,只要总工资<50000。但这根本行不通
我再次检查了运行脚本的witch,结果如下:
一些测试结果:
第一次跑步:
PL/SQL过程已成功完成。Totaal uit te keren salaris:55000
马恩萨尔变成了5500人
第二次
PL/SQL过程已成功完成。Totaal uit te keren salaris:55000
马恩萨尔变成了6050
第三次
PL/SQL过程已成功完成。科伦萨拉里斯托塔尔酒店:54450
maandsal改为6655,这应该是解决方案
DECLARE
total_salaris INT := 0;
CURSOR employee_cur IS
SELECT employee_id, first_name, salary
FROM employees;
employee_rec employee_cur%rowtype;
BEGIN
OPEN employee_cur;
LOOP
FETCH employee_cur INTO employee_rec;
total_salaris := total_salaris + (employee_rec.salary * 1.1);
EXIT WHEN employee_cur%NOTFOUND OR total_salaris > 50000;
UPDATE employees
SET salary = (employee_rec.salary * 1.10)
WHERE employee_id = employee_rec.employee_id;
END LOOP;
CLOSE employee_cur;
END;
每次跑步都会增加所有的薪水,还是只是其中的一部分?你们的跑步总收入应该是旧的还是新的?而且你的游标查询是无序的,所以哪些员工得到加薪是不确定的(现实世界有时会像这样;并查看
以获取更新信息
。对于我的不确定性,我深表歉意。我从所有员工加薪中得到的测试结果。已经尝试了很多。但是我想不出来。我觉得我的整个问题都是错的“总计”行不同意;如果没有退出循环,每次都会高出很多。好吧,你的意思是没有调用OR totaal_salaris>50000或totaal_salaris:=totaal_salaris+medewerker_row。maandsal不起作用?:不,它们看起来确实起作用。在第一次迭代11次、第二次迭代10次、第三次迭代9次之后,您将退出循环,因为它将提前到达50000次以上。(添加调试以验证这一点)。如果不是这样的话,你第一次会看到70000(14x5000),而不是55000。如果我创建数据并运行代码,我会看到11设置为5500,2设置为5000。经过三次迭代,我得到了10x6655、1x6050、1x5500和2x5000。如果您看到所有行都是6655,那么您没有运行发布的代码。