• 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
CD2 2009年05月18日
ORA-01002 违反读取顺序错误(在线等,高分答谢)
功能:
从发件箱取出待发送的定时邮件,取出后将取走的数据标记为已被取走(字段get_flag更新为"MOVED")。

结果:
运行后取走的数据更新正常,但是游标返回后报错"ORA-01002 违反读取顺序错误"

请大侠给出解决方法,高分答谢

CREATE OR REPLACE PROCEDURE P_VMS_QUERYTIMINGMAIL

(

i_QueryCount IN NUMBER,
o_Ret OUT NUMBER, -- 返回结果码 0 成功 1失败
o_TimingMailTRef OUT SYS_REFCURSOR -- 待发送邮件列表
)

AS

v_MailinfoRec t_outbox_info%ROWTYPE;

BEGIN
OPEN o_TimingMailTRef FOR

SELECT * FROM t_mbx_outbox_mailinfo t
WHERE t.is_timing = 1
AND t.get_flag IS NULL
AND t.mail_status = 2
AND t.send_time <= SYSDATE
AND ROWNUM <= i_QueryCount
AND PARTCOL_USERNO = SUBSTR(USERNO, -3, 2);


LOOP
FETCH o_TimingMailTRef
INTO v_MailinfoRec;
-- 修改用户的定时发送状态
--UPDATE t_mbx_outbox_mailinfo SET get_flag = 'MOVED' WHERE mailid = v_MailinfoRec.Mailid;
-- COMMIT;
EXIT WHEN o_TimingMailTRef%NOTFOUND;

END LOOP;

o_Ret := 0;

EXCEPTION
WHEN OTHERS THEN
o_Ret := 1;
IF o_TimingMailTRef%ISOPEN THEN
CLOSE o_TimingMailTRef;
END IF;
OPEN o_TimingMailTRef FOR
SELECT NULL FROM dual WHERE 1 = 0;
P_COMM_ADDEXCEPTION('P_VMS_QUERYTIMINGMAIL', SQLERRM, SQLCODE, NULL);
END P_VMS_QUERYTIMINGMAIL;
...全文
99 点赞 收藏 9
写回复
9 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Oracle
创建于2007-09-28

6391

社区成员

5.4w+

社区内容

Oracle开发相关技术讨论
社区公告
暂无公告