打开一个游标后,可以更新当前游标里后的记录吗?
也即可以更新cursor吗,在loop到下条时,能检验到更新后的记录吗?
下面是我的一个应用,可有问题.
请兄弟们帮助.多谢!
PROCEDURE Message(arg1 IN VARCHAR2,arg2 OUT VARCHAR2,arg3 IN VARCHAR2) IS
CURSOR server_info_Cursor IS
SELECT URL, SEQ,ACTIVE,curr FROM server_infoWHERE active = 'Y' ORDER BY seq for updateofactive ,curr;
v_updateMsg VARCHAR2(256);
BEGIN
IF isSendMsgEnable() = 'Y' THEN
BEGIN
FOR server_info_record IN server_info_Cursor LOOP
-- callibm(server_info_record.url, arg1, arg2, arg3);
arg2 := '4 error.'; -- (for test)
IF (substr(arg2, 0, 1) = '4') THEN
UPDATE server_info SET active = 'N' ,curr = 'N' WHERE seq = server_info_record.seq;
UPDATE server_info SET curr = 'Y' WHERE seq = server_info_record.seq + 1 AND active = 'Y';
EXCEPTION
WHEN OTHERS THEN
writelog('FANG','[AS400_SEND.MESSAGE:SQLERR UPDATEING SERVER INFO]' || sqlerrm);
v_result := '1 UPDATEING SQLERR.';
ELSE
exit ;
END IF;
END LOOP;
END;
arg2 := showServerStatus();
ELSE
arg2 := '0';
END IF;
commit;
END Message;
|