繁体   English   中英

没有从SELECT语句填充Oracle Cursor吗?

[英]Oracle Cursor not being populated from SELECT statement?

我一直在编写Stored Proc,以从表中选择一堆ID,将结果集保存到游标中,然后遍历Cursor,根据Cursor中所关注的ID来更新表中的行。 计划添加更多条件语句,但到目前为止。

CREATE OR REPLACE PROCEDURE CHANGE_PESONAL_DETAILS
AS

CURSOR
person_cur
IS

select b.id
    from blah1 b
        inner join blah2 b2 on b.id = b2.fkid;
person_rec person_cur%ROWTYPE;

BEGIN
FOR person_rec in person_cur

LOOP

dbms_output.put_line
(
person_rec.id
);

UPDATE blah1 set Details = DetailsLineOne || ' ' || DetailsLineTwo WHERE id = person_rec.id;

END LOOP;
COMMIT;

END;

我在这里编译的东西很好,尽管执行时却从未发生过更新。 我已经在输出行中添加了内容,以查看光标中的内容,但是什么都没有打印出来。

我的用于填充Cursor的Select语句本身运行正常,返回了我期望的所有数据,尽管在上面执行时没有任何结果。 好像Begin之后的所有内容都没有执行,尽管我不明白为什么如前所述,我的Select自行返回结果。

也许在填充游标的上下文中,某些行为有所不同? 任何建议都很好。

请检查过程,而没有光标和循环。

CREATE OR REPLACE PROCEDURE CHANGE_PESONAL_DETAILS
AS
BEGIN
UPDATE blah1 set Details = DetailsLineOne || ' ' || DetailsLineTwo WHERE id IN (select b.id
    from blah1 b inner join blah2 b2 on b.id = b2.fkid);
END;

检查使用循环

CREATE OR REPLACE PROCEDURE CHANGE_PESONAL_DETAILS
AS
CURSOR person_cur IS
  select b.id
    from blah1 b
        inner join blah2 b2 on b.id = b2.fkid;

  person_rec person_cur%ROWTYPE;
BEGIN
    OPEN person_cur;
    LOOP
      FETCH person_cur INTO person_rec;
      EXIT WHEN person_cur%NOTFOUND;

      UPDATE blah1 set Details = DetailsLineOne || ' ' || DetailsLineTwo WHERE id = person_rec.id;
    END LOOP;
    CLOSE person_cur;
END;

我们不能宣布一个rowtype ,如果我们使用游标游标的for loop使用的变量for loop将被用来访问光标列。

因此,在执行过程以查看结果(可打印语句)之前,请删除行rowtype声明并尝试类似操作,并且还包括SET SERVEROUT ON命令。

CREATE OR REPLACE PROCEDURE CHANGE_PESONAL_DETAILS
AS

CURSOR person_cur IS
     select b.id from blah1 b inner join blah2 b2 on b.id = b2.fkid;
BEGIN
     FOR person_rec in person_cur LOOP
          dbms_output.put_line(person_rec.id);
          UPDATE blah1 set Details = DetailsLineOne || ' ' || DetailsLineTwo WHERE id = person_rec.id;
     END LOOP;
     COMMIT;
END;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM