我在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但不是这样,我无法弄清楚原因。
答案 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;