选择更新后返回refcursor



我正试图通过Select中用于更新的refcursor返回数据,但我找不到任何方法。有人能给我指路吗?

CREATE OR REPLACE PROCEDURE SELECT_SCHEDULED_REPORTS
        (o_scheduledreports_cursor OUT SYS_REFCURSOR)
    IS
      CURSOR report_ids
  IS
    SELECT *
    FROM dwp_rep_scheduler_t
    WHERE SCHEDULE_ID IN
      (SELECT SCHEDULE_ID
      FROM
        (SELECT *
        FROM dwp_rep_scheduler_t a
        WHERE status      = 1
        AND schedule_type = 1
        ORDER BY a.start_date
        )
    WHERE ROWNUM <= 5
      ) FOR UPDATE OF status;
    BEGIN         
     FOR report_id IN report_ids
      LOOP
       UPDATE dwp_rep_scheduler_t SET status = 2 WHERE CURRENT OF report_ids;
      END LOOP;
        COMMIT;
-- can I do something like open o_scheduledreports_cursor for report_ids
      END;
    /

根据@Lalit Kumar B的建议,我尝试了以下操作,但现在它编译时出现错误,因为"PLS-00221:'O_SCHEDULEDREPORTS_CURSOR'不是过程或未定义"

CREATE OR REPLACE PROCEDURE SELECT_SCHEDULED_REPORTS (
   o_scheduledreports_cursor OUT SYS_REFCURSOR)
IS
begin
  open o_scheduledreports_cursor  for
          SELECT *
            FROM dwp_rep_scheduler_t
           WHERE SCHEDULE_ID IN (SELECT SCHEDULE_ID
                                   FROM (  SELECT *
                                             FROM dwp_rep_scheduler_t a
                                            WHERE status = 1 AND schedule_type = 1
                                         ORDER BY a.start_date)
                                  WHERE ROWNUM <= 5)
      FOR UPDATE OF status;
   BEGIN
      FOR report_id IN o_scheduledreports_cursor
      LOOP
         UPDATE dwp_rep_scheduler_t
            SET status = 2
          WHERE CURRENT OF report_ids;
      END LOOP;
      COMMIT;
   END;
END SELECT_SCHEDULED_REPORTS;
/

Select for update是一个编程工具,您可以使用它来确保没有其他人更新您的数据。在PL/SQL中,您将使用rows locked for update,然后执行所需的事务。Commit您的更改,Oracle将发布lock mode 3

你可以简单地做,

打开的cur从表中选择column_list,其中。。。。

没有那么具体,但是,这个关于select for ...update的asktom链接是一个很好的阅读https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:927629362932

你可能也有兴趣了解有关该条款的一些有趣的事情,以下是我对select..for update的一个神话的看法http://lalitkumarb.wordpress.com/2014/09/04/a-myth-about-row-exclusive-table-lock-on-select-for-update-with-no-rows/

希望它能有所帮助!

最新更新