Kursory i wrzucanie zawartosci do tabeli

0

Witam

Mialem ostatnio zadanie na zajeciach na studiach zwiazane z kursorami. Z pomoca kolegi zrobilem je, jednak nie do konca rozumiem po co linijka

 FETCH emp_cursor INTO v_lname,v_sal;

jest dwa razy. Caly kod wyglada tak:

delete from top_dogs;


DECLARE
v_num NUMBER(3) := 5;
v_lname employees.last_name%TYPE;
v_sal employees.salary%TYPE;
CURSOR emp_cursor IS
SELECT last_name, salary
FROM employees
ORDER BY salary DESC;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO v_lname,v_sal;
WHILE emp_cursor %ROWCOUNT <= v_num AND emp_cursor%FOUND LOOP
INSERT INTO top_dogs (name,salary) VALUES (v_lname,v_sal);
FETCH emp_cursor INTO v_lname,v_sal;
END LOOP;
CLOSE emp_cursor;
COMMIT;
END; 
2

"ładniej" by było tak:

DECLARE
  v_num NUMBER(3) := 5;
  v_lname employees.last_name%TYPE;
  v_sal employees.salary%TYPE;
  CURSOR emp_cursor IS
    SELECT last_name, salary
    FROM employees
    ORDER BY salary DESC;
BEGIN
  OPEN emp_cursor;
  WHILE emp_cursor %ROWCOUNT <= v_num AND emp_cursor%FOUND LOOP
    FETCH emp_cursor INTO v_lname,v_sal;
    INSERT INTO top_dogs (name,salary) VALUES (v_lname,v_sal);
  END LOOP;
  CLOSE emp_cursor; 
  COMMIT;
END; 
1

ja bym to zrobił tak

DECLARE
v_num NUMBER(3) := 5;
v_lname employees.last_name%TYPE;
v_sal employees.salary%TYPE;
CURSOR emp_cursor IS
SELECT last_name, salary
FROM employees
ORDER BY salary DESC;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_lname,v_sal;
EXIT WHEN emp_cursor%ROWCOUNT >= v_num OR emp_cursor%NOTFOUND;
INSERT INTO top_dogs (name,salary) VALUES (v_lname,v_sal);
END LOOP;
CLOSE emp_cursor;
COMMIT;
END; 

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