我的程序有问题......在这种情况下,我想把工资飙升到已经工作了5年或更长时间的商店“Bodega”的员工(Empleado)(...对不起我的英语,我说西班牙语XD)。 首先,我正在考虑选择满足条件的所有员工的ID(在游标中),然后将它们与EMPLEADO TABLE中的ID'进行比较,如果相同(ID'S)则更新工资......它不会使用IF - END IF(我输入评论)但没有它。 需要帮助......我做错了什么但不知道它是什么。
CREATE OR REPLACE PROCEDURE aumento_empleado(idBodega IN CHAR)IS
CURSOR c_empl IS SELECT E.idEmpleado
FROM Empleado E, Bodega B
WHERE( MONTHS_BETWEEN(sysdate,E.fecha_contrato)>=5*12
AND E.id_Bodega=B.id_Bodega
AND B.id_Bodega=idBodega);
idEmpl Char(8);
NO_EMP EXCEPTION;
BEGIN
OPEN c_empl;
LOOP
FETCH c_empl INTO idEmpl;
EXIT WHEN c_empl%notfound;
IF c_empl%ROWCOUNT=0 THEN
RAISE NO_EMP;
END IF;
--IF (idEmpl=Empleado.idEmpleado) THEN
UPDATE Empleado
SET Empleado.Sueldo=Empleado.Sueldo + Empleado.Sueldo*0.05;
--END IF;
END LOOP;
CLOSE c_empl;
EXCEPTION
WHEN NO_EMP THEN
dbms_output.put_line('No hay empleados que cumplan con las condiciones pedidas para la bonificacion' ) ;
WHEN OTHERS THEN
dbms_output.put_line('Error: hubo un error durante la ejecucion del procedimiento' ) ;
END aumento_empleado;
答案 0 :(得分:4)
此单一陈述应该适用于您的目的
UPDATE Empleado E
SET E.Sueldo=E.Sueldo + E.Sueldo*0.05
WHERE MONTHS_BETWEEN(sysdate,E.fecha_contrato)>=5*12
AND E.id_Bodega IN (SELECT B.id_Bodega FROM Bodega B)
避免在不是绝对需要的情况下使用循环。