2013-06-29 11 views
0

我在我的程序有問題......在這種情況下,我想工資raisy員工(Empleado)已經工作5年以上的旅館商店「酒窖「(...對我的英語感到抱歉,我說西班牙語XD)。 首先,我在想選擇所有滿足條件的(在光標),然後比較它們的ID在EMPLEADO表,如果相同(ID用),然後更新工資員工的ID ......這不適用於IF - END IF(我在評論中)但沒有它。 需要幫助...我做錯了什麼,但不知道它是什麼。光標在PL/SQL,我的程序不工作

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; 
+1

你需要使用一個proc來做這個任務嗎?對於任務來說,proc實際上太複雜了。 – bitfiddler

+0

確實 - 這是一個單一的UPDATE查詢; SP是嚴重矯枉過正 – Trent

+1

我懷疑你需要修改UPDATE語句,像'UPDATE Empleado SET Empleado.Sueldo = Empleado.Sueldo + Empleado.Sueldo * 0.05 WHERE EMPLEADO.idEMPLEADO = idEmpl'。請不要道歉 - 你的英語比我的西班牙語好很多。 :-)分享和享受。 –

回答

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) 

避免。