[PL/SQL] Update wielu rekordow

0

Mam takie polecenie:
utwórz procedurę, której zadaniem będzie dokonanie jednakowej podwyżki dla wszystkich pracowników danego kierownika. Procedura
w argumencie otrzyma numer kierownika i kwotę, o jaką należy podnieść pensję podstawową jemu i wszystkim jego podwładnym z tabeli EMP (employee).

dopiero zaczynam naukę PL/SQL i nie za bardzo wiem jak to zrobić, jak updatować wiele rekordów naraz?
na razie wysmarowałem coś takiego:

create or replace procedure podwyzka_PENSJI(KIEROWNIK number, KWOTA number)
AS
b integer;
**--kursor zwracający wszystkich pracownikow do podwyzki, dziala dobrze, zwraca wiele wierszy**
cursor pracownicy_podwyzka is
	select EMPNO, ENAME, JOB, MGR, SAL
	from emp
	where mgr=KIEROWNIK OR empno=KIEROWNIK;
dopodw pracownicy_podwyzka%rowtype  **--zmienna 'wierszowa' do ktorej mozna wsadzic rekordy zwracane przez powyzszy kursor, potrzebna do dalszej czesci zadania**;

BEGIN
	select COUNT(*) into b
	from emp
	where empno=KIEROWNIK;
	if b>0 then

		open pracownicy_podwyzka;
		fetch pracownicy_podwyzka into dopodw; //--i tutaj chcialbym zeby do 'dopodw' wsadzic wszystkie rekordy zwrocone przez kursor i przeprowadzic na nich update, teraz natomiast wsadzam tylko pierwszy rekord i tylko ten rekord ponizej wypisuje i update'uje. W przykladowej procedurze, na podstawie ktorej sie uczylismy budowy procedur, mam tylko uzycie polecenia fetch i srednio moglem znaleźć inne przykłady, wiekszosc w necie jest dla PHP, ktorego sie jeszcze nie uczylem..//__foo__
		dbms_output.put_line('Pracownik do podwyzki = '|| dopodw.EMPNO);
		update EMP
		set SAL=SAL+KWOTA
		where EMPNO=dopodw.EMPNO;
	else
		dbms_output.put_line('Nie ma kierownika o takim numerze');
	end if;
end;
 

trzeba użyć jakiejś pętli czy w jaki sposób można to zrobić?
pozdrawiam

0

Już sobie poradziłem pętlą, jakby ktoś miał podobny problem, to poniżej kod wypisujący wszystkich pracowników do podwyżki:

create or replace procedure podwyzka_PENSJI(KIEROWNIK number, KWOTA number)
AS
b integer;

cursor pracownicy_podwyzka is
	select EMPNO, ENAME, JOB, MGR, SAL
	from emp
	where mgr=KIEROWNIK OR empno=KIEROWNIK;

BEGIN
	select COUNT(*) into b
	from emp
	where empno=KIEROWNIK;
	if b>0 then
		for rec in pracownicy_podwyzka LOOP
			dbms_output.put_line('Pracownik do podwyzki = '|| rec.EMPNO);
		END LOOP;
		
	else
		dbms_output.put_line('Nie ma kierownika o takim numerze');
	end if;
end;
0

przecież to się robi jednym zapytaniem! Po co tam kursory, pętle i selecty?

CREATE OR REPLACE PROCEDURE podwyzka_PENSJI(KIEROWNIK NUMBER, KWOTA NUMBER)
AS
BEGIN
  UPDATE emp SET sal = sal + kwota WHERE mgr = KIEROWNIK OR empno = KIEROWNIK;
END;

1 użytkowników online, w tym zalogowanych: 0, gości: 1