记录一次存储过程开发(实现短信发送)

该博客介绍了如何在Oracle数据库中创建两个过程,用于发送短信。SEND_SMS过程首先根据划帐ID查询相关信息并拼接短信内容,然后插入待发送表并更新划帐历史状态。SEND_QUEARY_SMS作为外层入口,遍历满足条件的划帐ID并调用SEND_SMS。同时,通过DBMS_Jobs设置定时任务,每30分钟执行一次SEND_QUEARY_SMS,确保短信及时发送。
摘要由CSDN通过智能技术生成

主业务逻辑函数

create or replace procedure SEND_SMS(i_划帐ID varchar2)

 IS
  i_workno  varchar2(32);
  i_ltdno   varchar2(16);
  i_bid     varchar2(16);
  i_ysbs    varchar2(16);
  i_ysje    varchar2(16);
  i_sdbs    varchar2(16);
  i_sdje    varchar2(16);
  i_phone   varchar2(12);
  i_content varchar2(1000);
  i_time    varchar2(32);

BEGIN

  --1、根据划帐ID查询划帐信息 拼接短信内容
  SELECT 生成工号,
         a.LTDNO,
         信息描述,
         应收笔数,
         应收金额,
         收到笔数,
         收到金额,
         to_char(生成日期, 'yyyy-mm-dd')
    into i_workno, i_ltdno, i_bid, i_ysbs, i_ysje, i_sdbs, i_sdje, i_time
    FROM 划帐历史 a, 划帐信息 b
   where 划帐ID = i_划帐ID
     and a.划帐信息 = b.划帐信息
     and 送盘文件 like '%TXNTYP%'
     and sendsmsstate is null -- 1表示已发送短信
     and 销帐日期 > sysdate - 100 -- 以前没发送的不发送
     and 返盘文件 is not null;

  i_content := '划帐id:' || i_划帐ID || ',送盘日期:' || i_time || ',总行编号:' || i_bid ||
               ',应收笔数:' || i_ysbs || '金额:' || i_ysje || ',收到笔数:' || i_sdbs ||
               '金额:' || i_sdje;

  --2、根据生成工号查询送盘手机号码

  begin
    select phone into i_phone from tb_sys_user where userno = i_workno;
  exception
    when no_data_found then
      i_phone := 0;
  end;

  if i_phone <> 0 then
    -- 3、插入待发送表 标记划帐历史表已发送短信
    insert into wait_deal_mess@wechat
      (ID,
       TYPE,
       HUHAO,
       TEL,
       MCONTENT,
       ADDTIME,
       STATE,
       PERSON,
       DBID,
       SMSID,
       SMSCOUNT,
       CLIENTNAME,
       READYTIME,
       LTDNO,
       SYSTEMID,
       SENDINTERFACE)
    values
      (waitdealmess_sequence.nextval@wechat,
       1,
       0,
       i_phone,
       i_content,
       sysdate,
       1,
       i_workno,
       0,
       51851334,
       3,
       '划帐通知短信',
       null,
       '110',
       'sms',
       'WLSF');
  
    --alter table 划帐历史 add sendsmsstate varchar(4);
    update 划帐历史
       set sendsmsstate = 1
     where 划帐ID = i_划帐ID
       and 返盘文件 is not null;
  
  end if;

END;
/

 

外层入口函数

create or replace procedure SEND_QUEARY_SMS

 IS
  cursor c_job is
    select 划帐ID
      from 划帐历史
     where 送盘文件 like '%TXNTYP%'
       and sendsmsstate is null -- 1表示已发送短信
           and 销帐日期 > sysdate - 100 -- 以前没发送的不发送
       and 返盘文件 is not null;
  c_row c_job%rowtype;

BEGIN

  for c_row in c_job loop
    send_sms(c_row.划帐ID);
  end loop;

END;
/

 

oracle定时设置

PLSQL在DBMS_Jobs新建定时任务

WHat值输入主业务逻辑函数名称(注意分号结尾);间隔百度自行填写:

每30分钟执行一次:TRUNC(sysdate,'mi') + 30/ (24*60)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值