我正在尝试创建一个程序包和程序,我找到所有从事MA或SA工作的雇员,如果他们的工资低于平均工资,那么他们的工资增加33%。
我找不到问题并使其发挥作用。
这是代码,无法让它工作:
create or replace package body name2 as
procedure one(
alga emp.sal%type,
new_sal emp.sal%type)
cursor kursors1 is
select ename, sal from emp where job LIKE 'MA%' OR e.job LIKE 'SA%' for update sal;
begin
select round(avg(sal),2) videja_alga into alga from emp
for darb in kursors1
loop
if darb.sal < alga then
new_sal:=darb.sal+(darb.sal*0.33);
dbms_output.put_line('New sal: ' || darb.sal);
update emp set sal = new_sal where current of kursors1;
end if;
end loop;
end;
end name2;
/
答案 0 :(得分:0)
下次请妥善保管。否则很难解释。
CREATE OR REPLACE PACKAGE BODY name2
AS
PROCEDURE one (alga emp.sal%TYPE, new_sal emp.sal%TYPE)
AS
CURSOR kursors1
IS
SELECT ename, sal
FROM emp
WHERE job LIKE 'MA%' OR e.job LIKE 'SA%';
BEGIN
SELECT ROUND (AVG (sal), 2) videja_alga
INTO alga
FROM emp;
FOR darb IN kursors1
LOOP
IF darb.sal < alga
THEN
new_sal := darb.sal + (darb.sal * 0.33);
DBMS_OUTPUT.put_line ('New sal: ' || darb.sal);
UPDATE emp
SET sal = new_sal
WHERE CURRENT OF kursors1;
END IF;
END LOOP;
END;
END name2;
完成的更改:
这整个代码可以用更少的方式完成,尝试使用分区,它会在光标本身给你avg值,你可以在光标本身进行计算,只需要一个更新,下面将循环遍历光标。 / p>