欢迎光临
我们一直在努力

使用VB调用Oracle程序包内的存储过程返回结果集-数据库专栏,ORACLE

建站超值云服务器,限时71元/月

       在实际的项目开发中我们需要通过vb(或其他语言工具)调用oracle程序包内的存储过程返回结果集.这里以短信运营平台中的一个调用为例来说明这个过程,希望对你有所帮助.

–一.使用sql*plus创建以下项目:
–1.建表(“ow_smp”为方案名称,下同)

create table “ow_smp”.”sm_send_sm_list”(
    serialno int  primary key,  –序列号
    serviceid varchar(50),     –服务id(业务类型)
    smcontent varchar(1000),    –短信内容
    sendtarget varchar(20),     –发送目标   
    priority smallint,      –发送优先级
    rcompletetimebegin date,   –要求完成日期(开始)
    rcompletetimeend date,    –要求完成日期(结束)
    rcompletehourbegin smallint,   –要求完成时间(开始)
    rcompletehourend smallint,    –要求完成时间(结束)
    requesttime date,     –发送请求时间
    roadby smallint,      –发送通道(0:gsm模块,1:

短信网关)
    sendtargetdesc varchar(100),   –发送目标描述
    feevalue float,       –本条短信信息费用(

单位:分)
    pad1 varchar(50),
    pad2 varchar(100),
    pad3 varchar(200),
    pad4 varchar(500),
    pad5 varchar(1000)
);
–2.建立自增序列
create sequence “ow_smp”.”sendsno”;
create or replace trigger “ow_smp”.”bfinert_sm_send” before
insert on “sm_send_sm_list”
    for each row begin
  select sendsno.nextval into :new.serialno from dual;
end;
–3.插入数据
insert sm_send_sm_list (smcontent) values(happy new year to jakcy!);
insert sm_send_sm_list (smcontent) values(happy new year to wxl!);
–4.建立程序包和包体

create or replace  package “ow_smp”.”ow_smp_package”            
            is
      type tserialno is table of sm_send_sm_list.serialno%type
        index by binary_integer;
      type tserviceid is table of sm_send_sm_list.serviceid%type
        index by binary_integer;
      type tsmcontent is table of sm_send_sm_list.smcontent%type
        index by binary_integer;
      type tsendtarget is table of sm_send_sm_list.sendtarget%type
        index by binary_integer;
      type tpriority is table of sm_send_sm_list.priority%type
        index by binary_integer;
      type trcompletetimebegin is table of sm_send_sm_list.rcompletetimebegin%type
        index by binary_integer;
      type trcompletetimeend is table of sm_send_sm_list.rcompletetimeend%type
        index by binary_integer;         
      type trcompletehourbegin is table of sm_send_sm_list.rcompletehourbegin%type
        index by binary_integer;
      type trcompletehourend is table of sm_send_sm_list.rcompletehourend%type
        index by binary_integer;     
      type trequesttime is table of sm_send_sm_list.requesttime%type
        index by binary_integer;    
      type troadby is table of sm_send_sm_list.roadby%type
        index by binary_integer;   
      type tsendtargetdesc is table of sm_send_sm_list.sendtargetdesc%type
        index by binary_integer;
      type tfeevalue is table of sm_send_sm_list.feevalue%type
        index by binary_integer;
      type tpad1 is table of sm_send_sm_list.pad1%type
        index by binary_integer;      
      type tpad2 is table of sm_send_sm_list.pad2%type
        index by binary_integer;      
      type tpad3 is table of sm_send_sm_list.pad3%type
        index by binary_integer;      
      type tpad4 is table of sm_send_sm_list.pad4%type
        index by binary_integer;      
      type tpad5 is table of sm_send_sm_list.pad5%type
        index by binary_integer;
      type tcount is table of number
        index by binary_integer;
 
       procedure getsendsm
              (v_nowbyminute   in number,
               v_serialno      out tserialno,
               v_serviceid     out tserviceid,
               v_smcontent     out tsmcontent,
               v_sendtarget     out tsendtarget,
               v_priority      out tpriority,
               v_rcompletetimebegin out trcompletetimebegin,
               v_rcompletetimeend   out trcompletetimeend,
               v_rcompletehourbegin out trcompletehourbegin,
               v_rcompletehourend   out trcompletehourend,
               v_requesttime        out trequesttime,
               v_roadby             out troadby,
               v_sendtargetdesc     out tsendtargetdesc,
               v_feevalue           out tfeevalue,
               v_pad1               out tpad1,
               v_pad2               out tpad2,
               v_pad3               out tpad3,
               v_pad4               out tpad4,
               v_pad5               out tpad5,
               v_count            out tcount
               );

 end;
/
create or replace  package body “ow_smp”.”ow_smp_package”       
            is
      procedure getsendsm –获得前1000条在指定时间内的待发短信
              (v_nowbyminute   in number,
               v_serialno      out tserialno,
               v_serviceid     out tserviceid,
               v_smcontent     out tsmcontent,
               v_sendtarget     out tsendtarget,
               v_priority      out tpriority,
               v_rcompletetimebegin out trcompletetimebegin,
               v_rcompletetimeend   out trcompletetimeend,
               v_rcompletehourbegin out trcompletehourbegin,
               v_rcompletehourend   out trcompletehourend,
               v_requesttime        out trequesttime,
               v_roadby             out troadby,
               v_sendtargetdesc     out tsendtargetdesc,
               v_feevalue           out tfeevalue,
               v_pad1               out tpad1,
               v_pad2               out tpad2,
               v_pad3               out tpad3,
               v_pad4               out tpad4,
               v_pad5               out tpad5,
               v_count            out tcount)
               
      is
          cursor sendsm_cur is
                  select * from sm_send_sm_list
                  where rcompletehourbegin<=v_nowbyminute and

rcompletehourend>=v_nowbyminute and (rcompletetimebegin is null or

rcompletetimebegin<=sysdate) 
                  and (rcompletetimeend is null or rcompletetimeend>=sysdate-1)
                  and  rownum<1001;
                 
          smcount number default 1;
      begin
          for sm in sendsm_cur
          loop
                  v_serialno(smcount):=sm.serialno;
                  v_serviceid(smcount):=sm.serviceid;
                  v_smcontent(smcount):=sm.smcontent;
                  v_sendtarget(smcount):=sm.sendtarget;
                  v_priority(smcount):=sm.priority;
                  v_rcompletetimebegin(smcount):=sm.rcompletetimebegin;
                  v_rcompletetimeend(smcount):=sm.rcompletetimeend;
                  v_rcompletehourbegin(smcount):=sm.rcompletehourbegin;
                  v_rcompletehourend(smcount):=sm.rcompletehourend;
                  v_requesttime(smcount):=sm.requesttime;
                  v_roadby(smcount):=sm.roadby;
                  v_sendtargetdesc(smcount):=sm.sendtargetdesc;
                  v_feevalue(smcount):=sm.feevalue;
                  v_pad1(smcount):=sm.pad1;
                  v_pad2(smcount):=sm.pad2;
                  v_pad3(smcount):=sm.pad3;
                  v_pad4(smcount):=sm.pad4;
                  v_pad5(smcount):=sm.pad5;                 
                  if smcount=1 then
                    select count(*)
                    into v_count(smcount)
                    from  sm_send_sm_list
                    where rcompletehourbegin<=v_nowbyminute and

rcompletehourend>=v_nowbyminute and (rcompletetimebegin is null or

rcompletetimebegin<=sysdate) 
                    and (rcompletetimeend is null or rcompletetimeend>=sysdate-1)
                    and rownum<1001;
                  end if;
                  smcount:= smcount + 1;
          end loop;       
      end;
end;
/

二.使用vb调用ow_smp_package.getsendsm存储过程:

sub getsendsm()
  dim  cmd as new adodb.command
  dim rs as new adodb.recordset
  cmd.activeconnection = getconnection获得数据库连接
  cmd.commandtext = “{call ow_smp_package.getsendsm(?,{resultset

1000,v_serialno,v_serviceid,v_smcontent,v_sendtarget,v_priority,v_rcompletetimebegin,v_rcomp

letetimeend,v_rcompletehourbegin,v_rcompletehourend,v_requesttime,v_roadby,v_sendtargetdesc,

v_feevalue,v_pad1,v_pad2,v_pad3,v_pad4,v_pad5,v_count})}”
  cmd.commandtype = adcmdtext
  cmd.parameters.append .createparameter(“v_nowbyminute”, adinteger, adparaminput, , 900)
     
  rs.cursortype = adopenstatic
  rs.locktype = adlockreadonly
  set rs.source = cmd
  rs.open  
  while not rs.eof
      msgbox “sendsm data:serialno: ” & rs(“v_serialno”) & “,smcontent: ” & rs

(“v_smcontent”) & “,count: ” & rs(“v_count”)
      对结果集的处理在这里增加代码
      rs.movenext
   wend
   rs.close  
   set rs=nothing
   set cmd=nothing
end sub

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用VB调用Oracle程序包内的存储过程返回结果集-数据库专栏,ORACLE
分享到: 更多 (0)

相关推荐

  • 暂无文章