2013-05-21 3 views
0

я написал программу, которая использует курсор, чтобы обновить некоторые строки в этих table- здесь программа:пл/Процедура обновления SQL с курсором застревает

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; 

При запуске программы он застревает в команде обновления. Что не так с процедурой?

ответ

0

для того, чтобы обновить таблицу внутри курсора вам необходимо открыть курсор в режиме «FOR UPDATE», добавить к запросу «FOR UPDATE»:

(SELECT UNIQUE * 
    FROM Sellers 
    WHERE ID_Seller NOT IN (SELECT ID_Seller 
           FROM Sellers NATURAL JOIN Sales) FOR UPDATE); 
Смежные вопросы