【问题标题】:pl/sql update procedure with cursor gets stuck带光标的 pl/sql 更新过程卡住
【发布时间】:2013-05-16 10:06:44
【问题描述】:

我编写了一个程序,它使用游标来更新这些表中的某些行-这是程序:

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;

运行程序时,卡在更新命令上。 程序有什么问题?

【问题讨论】:

    标签: oracle stored-procedures cursor plsqldeveloper


    【解决方案1】:
    You need to add **FOR UPDATE** IN CURSOR TO UPDATE THE TABLE
    

    【讨论】:

      【解决方案2】:

      为了更新游标内的表,您需要以“FOR UPDATE”模式打开游标,添加到您的查询“FOR UPDATE”:

      (SELECT UNIQUE *
           FROM Sellers
          WHERE ID_Seller NOT IN (SELECT ID_Seller
                                    FROM Sellers NATURAL JOIN Sales) FOR UPDATE);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多