2016-07-01 5 views
0

war ich einen Code, ohne Schleife geschrieben, es für Schleife durch bitte geben Sie mir Lösung zu aktualisieren, erstellen oder Verfahren PR_UPDATETBEMP (KOMM IN NUMBER) ASWie aktualisiert man eine Spalte in meiner Tabelle nach Prozedur in Plsql mit For-Schleife?

begin 
    UPDATE XX_TBEMP 
    SET COMM=SAL*.05 
    WHERE SAL BETWEEN 80000 AND 99999; 
end PR_UPDATETBEMP; 
+0

Könnten Sie Ihre Tabellenstruktur ersetzen? Spalten usw. –

+0

Warum möchten Sie dies in einer Schleife tun? Mit der einzigen update-Anweisung haben Sie bereits alle Zeilen auf einmal aktualisiert und werden leistungsfähiger sein, als einen Cursor durchlaufen und die Daten jeweils Zeile für Zeile aktualisieren. – Boneist

+0

ENO \t NUMBER (3) \t Y \t \t ENAME \t VARCHAR2 (35) \t \t \t HIREDATE \t DATE \t \t \t SAL \t NUMBER (6) \t \t \t EXPR \t NUMBER (3) \t \t \t DEPTNO \t NUMMER (3) \t \t \t JOB \t VARCHAR2 (20) \t \t \t COMM \t NUMBER (10) –

Antwort

0
create or replace PACKAGE XX_UPDATETBEMP AS 
PROCEDURE XX_UPDATECOMM; 
end XX_UPDATETBEMP; 

create or replace PACKAGEBODY XX_UPDATETBEMP AS 
PROCEDURE XX_UPDATECOMM IS 
CURSOR C_TBEMP IS SELECT * FROM XX_TBEMP; 
R_TBEMP C_TBEMP%ROWTYPE; 
BEGIN 

FOR SAL IN C_TBEMP 
LOOP 
UPDATE XX_TBEMP 
     SET COMM  = sal * 0.2 where SAL BETWEEN 30000 AND 49999; 
     UPDATE XX_TBEMP 
     SET COMM  = sal * 0.15 where SAL BETWEEN 50000 AND 79999; 
     UPDATE XX_TBEMP 
     SET COMM  = sal * 0.1 where SAL BETWEEN 80000 and 99999; 
END LOOP; 
END XX_UPDATECOMM; 
END XX_UPDATETBEMP;