ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle高级队列3

oracle高级队列3

原创 Linux操作系统 作者:arthurshen_bleum 时间:2009-04-09 10:56:32 0 删除 编辑
Sql代码 复制代码
  1. create or replace procedure p102_mt_dequeue   
  2. (   
  3. p_equeue_name In varchar2, --队列名单大写字母,主队列:SMS_MT_QUEUE 备份队列:SMS_MT_QUEUE_BACKUP   
  4. p_client_id Out Number, --短信内部网关   
  5. p_res_str Out varchar2, --返回值 0 成功 -2 队列为空其它失败   
  6. p_label out varchar2, --标签   
  7. p_body out varchar2) --数据包体   
  8. Is/*   
  9. 功能: 出队列,返回给java程序   
  10. */   
  11. v_Dequeue_Options Dbms_Aq.Dequeue_Options_t;   
  12. v_Message_Properties Dbms_Aq.Message_Properties_t;   
  13. v_Message_Handle Raw(16);   
  14. v_Body_queue Mt_Struc;   
  15. v_label Varchar2(200);   
  16. v_body varchar2(1000);   
  17. res_str varchar2(20);   
  18. ---写日志区域   
  19. vPid NUMBER:=102;   
  20. vProName VARCHAR2(50):='p102_mt_dequeue';   
  21. vProTip VARCHAR2(255);   
  22. vErrorCode VARCHAR2(20);   
  23. vErrorMsg VARCHAR2(2000);   
  24. v_count Number;   
  25. Begin  
  26. --1 初始化   
  27. p_res_str:='-1' ;   
  28. --2 出队列设置属性   
  29. --???   
  30. --3 执行出队列操作   
  31. Select Count(0) Into v_count From sms_mt_tab Where q_name=p_equeue_name ;   
  32. If v_count >0 Then  
  33. dbms_aqadm.start_queue(p_equeue_name,enqueue=>true, dequeue=> true);   
  34. Dbms_Aq.Dequeue(Queue_Name => p_equeue_name,    
  35. Dequeue_Options => v_Dequeue_Options,   
  36. Message_Properties => v_Message_Properties,    
  37. Payload => v_Body_queue,    
  38. Msgid => v_Message_Handle);   
  39. -- 组和 label= 消息类型(CommandID)+运营商标识+地区标识(AreaID)+时间标识    
  40. -- 组合 body   
  41. --4 返回给java的包体   
  42. p103_change_label_body_str(v_Body_queue,res_str,v_label,v_body);   
  43. If res_str='0' Then  
  44. p_label :=v_label;   
  45. p_body :=v_body;   
  46. p_client_id:=v_Body_queue.CLIENT_ID;   
  47. --提交   
  48. Commit;   
  49. p_res_str:='0' ;   
  50. Else  
  51. p_res_str:='出队列后组串失败!' ;    
  52. End If;   
  53. Else  
  54. p_res_str:='队列里面没有数据,休息一下';   
  55. End If;   
  56. Exception   
  57. When Others Then  
  58. p_res_str:='-100';   
  59. vProTip:='出队过程异常!';   
  60. vErrorCode:=SQLCODE;   
  61. vErrorMsg:=SQLERRM;   
  62. p_pub_write_error_log(vPid,vProName,'','',   
  63. vProTip,vErrorCode,vErrorMsg,1);    
  64. Rollback;   
  65. end p102_mt_dequeue;  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20945761/viewspace-586834/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle高级队列2
下一篇: oracle高级队列4
请登录后发表评论 登录
全部评论

注册时间:2009-02-26

  • 博文量
    36
  • 访问量
    26318