これらのテーブルの行を更新するためにカーソルを使用するプログラムを作成しました。これがプログラムです。
DECLARE
-- Local variables here
CURSOR s
IS
(SELECT UNIQUE *
FROM Sellers
WHERE ID_Seller NOT IN (SELECT ID_Seller
FROM Sellers NATURAL JOIN Sales));
s_rec Sellers%ROWTYPE;
BEGIN
-- Test statements here
OPEN s;
LOOP
FETCH s INTO s_rec;
EXIT WHEN s%NOTFOUND;
DBMS_OUTPUT.put_line (s_rec.ID_Seller);
DBMS_OUTPUT.put_line (s_rec.Salary);
updateSalary (s_rec.ID_Seller, s_rec.Salary - 50);
END LOOP;
CLOSE s;
END;
これは updateSalary プロシージャです。
CREATE OR REPLACE PROCEDURE updateSalary (ID_S IN VARCHAR2,
newSalary IN FLOAT)
IS
BEGIN
UPDATE Sellers s
SET s.salary = newSalary
WHERE s.ID_Seller = ID_S;
END updateSalary;
プログラムを実行すると、更新コマンドでスタックします。手続きの何が悪い?