Я получил 3 таблицы:
BOOK(bookid primary,nbloans)
COPIES(copyid primary,bookid REFERENCES BOOK bookid)
BORROW(bid,copyid REFERENCES COPIES COPYID)
Мне нужно установить значение nbloans для всех заимствованных книг, поэтому я выполнил эту процедуру:
create or replace procedure procedure1
IS
cursor c1 is
SELECT BOOK.BOOKID AS Books,COUNT(*) AS countloans
FROM BORROW,COPIES,BOOK
WHERE BORROW.COPYID=COPIES.COPYID AND COPIES.BOOKID=BOOK.BOOKID
group by BOOK.BOOKID;
rec1 c1%ROWTYPE;
v_rows number;
BEGIN
OPEN c1;
LOOP
FETCH c1 into rec1;
EXIT WHEN c1%notfound;
UPDATE BOOK SET NBLOANS=rec1.countloans;
END LOOP;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('0 rows changed');
ELSIF SQL%FOUND THEN
v_rows:=SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE(v_rows||' rows changed');
END IF;
END;
Когда я попробовал только запрос SELECT, в каждой книге мне показывалось, сколько было кредитов и каков результат:
BOOKS COUNTLOANS
137 5
81 1
138 2
Этот результат верный, потому что я проверил таблицы. Но когда я делаю это в процедуре с курсором и l oop fetch, все nbloans были установлены в 2 (Заметил, что это было последнее значение) Почему это произошло?