存储过程DIY1

  • sqlserver中创建存储过程
    (1)建立自己的库
    (2)打开库,新建存储过程,CREATE PROCEDURE [owner].[procedureName] AS
        owner-----dbo   后一个参数可以自己定
    (3)要具体编写存储过程的内容,可以在右栏中双击你的存储过程名称
    (4)一个简单的存储过程
       CREATE PROCEDURE [dbo].[test] AS
       select count(*) as  sum from test1
       GO
    (5)运行存储过程
       在查询分析器中,找好数据库,然后 exec test 在点击 [运行]
  • ORACLE中创建存储过程

      在PROCEDURE 上面右击 选择 NEW

  例子:(1)我写的例子

create or replace procedure FlowMove_ModifyCZW(needSigBillNo in varchar2,
getFlowInstanNo in varchar2, getflowNodeNo in varchar2, flowState in varchar2,
nextNode  in varchar2 )

is
dates TIMESTAMP(6);
begin
 dbms_output.put_line('ffffffff');
--(1)修改当前用户的处理日期
 update tetdmis.gzl_流程流转状态 a1
 set a1.处理日期=to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-MM-dd')
 where a1.流程实例编号=getFlowInstanNo and a1.节点编号=getflowNodeNo;
 --(2)修改流程实例表的流程状态和当前节点编号
 update tetdmis.gzl_流程实例 a2
 set a2.流程状态=flowState,a2.当前节点编号=nextNode
 where a2.流程实例编号=getFlowInstanNo;
 --(3)如果流程没有流转完成,还要修改下一个节点的到达日期
 if flowState!='流转完成' then
  dbms_output.put_line('okkkkk');
  update tetdmis.gzl_流程流转状态 a3
 set a3.到达日期=to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-MM-dd')
 where a3.流程实例编号=getFlowInstanNo and a3.节点编号=nextNode;
 end if;
 --(4)根据单据编号 查找 DJ_单据单件明细 表,找到有多少单件虚拟编号
 if needSigBillNo!='nobill' then
  update tetdmis.CZW_出租物单件信息 a
   set a.已制单='否',
  (a.当前状态,a.位置编号)=(select 新状态,新位置 from tetdmis.DJ_单据单件明细 b
  where 单据编号=needSigBillNo and a.单件虚拟编号=b.单件虚拟编号)
  where a.单件虚拟编号 in (select 单件虚拟编号
  from tetdmis.DJ_单据单件明细 c where a.单件虚拟编号=c.单件虚拟编号 and c.单据编号=needSigBillNo);
 
 --(5)修改REP_每日出租物状况分布表,追溯到生效日期
 select pp.生效日期 as into dates from tetdmis.dj_单据 pp where pp.单据编号=needSigBillNo;
 -----------------------------------------------------
   update tetdmis.REP_每日出租物状况分布表 a
   set a.已制单 = '否',
      (a.当前状态, a.位置编号) =
      (
      select b.当前状态, b.位置编号
      from tetdmis.czw_出租物单件信息 b
        where
        b.单件虚拟编号=a.单件虚拟编号
        )
     where  a.日期 between (to_date(to_char(dates,'yyyy-mm-dd'),'yyyy-MM-dd'))
    and (to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-MM-dd'))
    and a.单件虚拟编号 in(select c1.单件虚拟编号
                  from tetdmis.DJ_单据单件明细 c1
                 where c1.单据编号 =needSigBillNo  );
 end if;
commit;
end flowmove_modifyczw;

(2)ORACLE中存储过程的测试

 在NEW ----->COMMAND WINDOW中SQL>  execute FlowMove_ModifyCZW('gj050506020010');

当然,此处参数传的个数不够,当时只是测试屏蔽了其他参数

(3)注意的问题

把循环放在外面(循环用IN构造)

(4)在JUBILDER中怎样调用存储过程

//定义变量

QueryDataSet qds = null;
 CallableStatement cstmt = null;
 Connection con = null;

///初始化

qds = WorkFlowDM.getDataModule().getQdsForBlob();
   qds.getDatabase().setConnection(cndp);
   con = qds.getDatabase().getJdbcConnection();

///调用存储过程

qds = WorkFlowDM.getDataModule().getQdsForBlob();
   qds.getDatabase().setConnection(cndp);
   con = qds.getDatabase().getJdbcConnection();
   cstmt = null;
   cstmt = con.prepareCall("{call TETDMIS.FlowMove_ModifyCZW(?,?,?,?,?)}");
   cstmt.setString(1, needSigBillNo); //将流程实例编号赋给存储过程
   cstmt.setString(2, getFlowInstanNo);
   cstmt.setString(3, getflowNodeNo);
   cstmt.setString(4, "流转完成");
   cstmt.setString(5, null);
   cstmt.execute();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值