- 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();