如何在不使用的情况下重构这些代码行CURSOR?我是PL/SQL的初学者.任何帮助,将不胜感激.谢谢
DECLARE
CURSOR c_emps IS
SELECT employee_id
FROM bonus;
v_region HR.REGIONS.region_name%TYPE;
v_salary hr.employees.salary%TYPE;
BEGIN
FOR r_emps IN c_emps LOOP
SELECT reg.region_name, emp.salary
INTO v_region, v_salary
FROM hr.employees emp,
hr.departments dep,
hr.Locations loc,
hr.countries cot,
hr.regions reg
WHERE emp.department_id = dep.department_id AND
dep.location_id = loc.location_id AND
loc.country_id = cot.country_id AND
cot.region_id = reg.region_id AND
employee_id = r_emps.employee_id;
IF v_region = 'Europe' THEN
UPDATE bonus
SET bonus = bonus + (v_salary * .01)
WHERE employee_id = r_emps.employee_id;
ELSE
UPDATE bonus
SET bonus = v_salary * .01
WHERE employee_id = r_emps.employee_id;
END IF;
END LOOP;
COMMIT;
END;
/
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)CURSOR c_emps IS SELECT employee_id FROM bonus;
您不需要显式声明CURSOR.你可以在CURSOR FOR LOOP中做到这一点:
FOR r_emps IN (SELECT employee_id FROM bonus)
LOOP
Run Code Online (Sandbox Code Playgroud)
如果PL/SQL不是必需的,那么您可以使用UPDATE语句中的CASE表达式在纯SQL中执行此操作.
就像是,
UPDATE bonus
SET bonus =
CASE
WHEN region = 'Europe'
THEN bonus + (v_salary * .01)
ELSE v_salary * .01
...
and so on
Run Code Online (Sandbox Code Playgroud)
是的,您需要将整个PL/SQL代码重写为SQL更新语句.但是,它会更好更快.For循环是逐行处理,因此它是缓慢的.如果你可以在SQL中做同样的事情,请避免使用PL/SQL.
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |