Oracle PL / SQL包不更新记录

时间:2017-09-11 07:38:55

标签: sql oracle plsql package oracle12c

我在Oracle Database 11g Express Edition 11.2.0.2.0版中有一个名为INCOMING_MSG的表 - 64位生产

INCOMING_MSG_ID NOT NULL NUMBER(10)     
CREATION_DATE            DATE           
CHANNEL                  VARCHAR2(50)   
MESSAGE                  VARCHAR2(1024) 
IP_ADDRESS               VARCHAR2(50)   
PARSED          NOT NULL NUMBER(1)  

我只是创建了这个包:

 procedure parseMsg 
  IS
        var1 VARCHAR(500);
        var2 VARCHAR(500);
        var3 VARCHAR(500);

        cursor c1 is
         SELECT incoming_msg_id
         FROM incoming_msg
            WHERE parsed = 0;


     begin

     FOR psd_rec in c1
     LOOP
        UPDATE incoming_msg SET PARSED=1;

    END LOOP;
  END;

end;

我在sqldeveloper中获得了运行此查询的所有记录:

SELECT incoming_msg_id
         FROM incoming_msg
            WHERE parsed = 0;

然后我也从我的sqldeveloper运行程序,期望执行后所有记录的值都是parsed = 1但不是这样,我无法弄清楚原因。

1 个答案:

答案 0 :(得分:1)

您忘记了commit;where条款ID:

 begin

 FOR psd_rec in c1
 LOOP
    UPDATE incoming_msg i SET i.PARSED=1 where i.incoming_msg_id = psd_rec .incoming_msg_id;

END LOOP;
commit;