- create or replace procedure p102_mt_dequeue
- (
- p_equeue_name In varchar2, --队列名单大写字母,主队列:SMS_MT_QUEUE 备份队列:SMS_MT_QUEUE_BACKUP
- p_client_id Out Number, --短信内部网关
- p_res_str Out varchar2, --返回值 0 成功 -2 队列为空其它失败
- p_label out varchar2, --标签
- p_body out varchar2) --数据包体
- Is/*
- 功能: 出队列,返回给java程序
- */
- v_Dequeue_Options Dbms_Aq.Dequeue_Options_t;
- v_Message_Properties Dbms_Aq.Message_Properties_t;
- v_Message_Handle Raw(16);
- v_Body_queue Mt_Struc;
- v_label Varchar2(200);
- v_body varchar2(1000);
- res_str varchar2(20);
- ---写日志区域
- vPid NUMBER:=102;
- vProName VARCHAR2(50):='p102_mt_dequeue';
- vProTip VARCHAR2(255);
- vErrorCode VARCHAR2(20);
- vErrorMsg VARCHAR2(2000);
- v_count Number;
- Begin
- --1 初始化
- p_res_str:='-1' ;
- --2 出队列设置属性
- --???
- --3 执行出队列操作
- Select Count(0) Into v_count From sms_mt_tab Where q_name=p_equeue_name ;
- If v_count >0 Then
- dbms_aqadm.start_queue(p_equeue_name,enqueue=>true, dequeue=> true);
- Dbms_Aq.Dequeue(Queue_Name => p_equeue_name,
- Dequeue_Options => v_Dequeue_Options,
- Message_Properties => v_Message_Properties,
- Payload => v_Body_queue,
- Msgid => v_Message_Handle);
- -- 组和 label= 消息类型(CommandID)+运营商标识+地区标识(AreaID)+时间标识
- -- 组合 body
- --4 返回给java的包体
- p103_change_label_body_str(v_Body_queue,res_str,v_label,v_body);
- If res_str='0' Then
- p_label :=v_label;
- p_body :=v_body;
- p_client_id:=v_Body_queue.CLIENT_ID;
- --提交
- Commit;
- p_res_str:='0' ;
- Else
- p_res_str:='出队列后组串失败!' ;
- End If;
- Else
- p_res_str:='队列里面没有数据,休息一下';
- End If;
- Exception
- When Others Then
- p_res_str:='-100';
- vProTip:='出队过程异常!';
- vErrorCode:=SQLCODE;
- vErrorMsg:=SQLERRM;
- p_pub_write_error_log(vPid,vProName,'','',
- vProTip,vErrorCode,vErrorMsg,1);
- Rollback;
- end p102_mt_dequeue;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20945761/viewspace-586834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20945761/viewspace-586834/