Oracle 在PL/SQL中,我的过程不起作用

Oracle 在PL/SQL中,我的过程不起作用,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我的程序有问题……在这种情况下,我想提高在“Bodega”商店工作5年或以上的员工(Employedo)的工资(……对不起我的英语,我会说西班牙语XD)。 首先,我想选择满足条件的所有员工的ID(在光标中),然后将其与Employedo表中的ID进行比较,如果相同(ID),则更新工资…它不适用于if-END if(我输入注释),但没有它。 需要帮助…我做错了什么,但不知道是什么 CREATE OR REPLACE PROCEDURE aumento_empleado(idBodega IN CH

我的程序有问题……在这种情况下,我想提高在“Bodega”商店工作5年或以上的员工(Employedo)的工资(……对不起我的英语,我会说西班牙语XD)。 首先,我想选择满足条件的所有员工的ID(在光标中),然后将其与Employedo表中的ID进行比较,如果相同(ID),则更新工资…它不适用于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;

这句话应该适合你的目的

    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)

避免在不是绝对必需的地方使用循环。

这一条语句应该适合您的需要

    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)

避免在非绝对必需的地方使用循环。

您是否需要为此任务或其他事项使用proc?这个过程对于这个任务来说实在太复杂了;SP严重过度使用我怀疑您需要将UPDATE语句修改为类似以下内容:UPDATE Empleado SET Empleado.Sueldo=Empleado.Sueldo+Empleado.Sueldo*0.05,其中Empleado.idEMPLEADO=idEmpl。请不要道歉-你的英语比我的西班牙语好多了。:-)分享和享受。你是否需要为此任务或其他事情使用proc?这个过程对于这个任务来说实在太复杂了;SP严重过度使用我怀疑您需要将UPDATE语句修改为类似以下内容:UPDATE Empleado SET Empleado.Sueldo=Empleado.Sueldo+Empleado.Sueldo*0.05,其中Empleado.idEMPLEADO=idEmpl。请不要道歉-你的英语比我的西班牙语好多了。:-)分享和享受。