目录
基本的SQL是高度非过程化的语言。过程化SQL是对SQL的扩展,使其增加了过程化功能。
1、存储过程介绍
2、一个demo
文件名:proc_test.sql
drop procedure proc_test;
create procedure proc_test(lv_statdate date,lv_xm char(2))
--定义返回值的字段类型
returning char(8),char(30),
decimal(16,2)
integer;
--定义返回值
Define lv_r char(8);
Define lv_name char(30);
Define lv_qb decimal(16,2);
Define lv_hb integer;
--当参数lv_xm='01'时执行下面这段代码
if lv_xm='01' then
select a.*
from t0 a
into temp t_result;
--插入并返回
foreach select * into lv_r,lv_name,lv_qb,lv_hb
from t_result order by zzl desc
return lv_r,lv_name,lv_qb,
lv_hb with resume;
end foreach
drop table t0;
drop table t_bz;
drop table t_sz;
drop table t_sz1;
drop table t_sz_sn;
drop table t_bz_sn;
drop table t_bz1;
drop table t_result;
end if;
--当参数lv_xm='02'时执行下面这段代码
if lv_xm='02' then
。。。。。//和上面一样
end if;
end procedure;
写完之后需要先执行一遍这个文件,存储过程就被存到数据库中了,在java代码中就直接用存储过程名就能找到这个存储过程了。
一般的sh脚本需要定时,存储过程不需要做定时。
java代码中的调用过程:
try {
//连接池获取连接和语句
Class.forName("**.jdbc***");
connWeb=DriverManager.getConnection("jdbc:****);
stmt=connWeb.createStatement();
query = "execute procedure proc_test('"+mstatdate1+"'"+",'"+mxm1+"'"+");" ;
//out.println(query);
//查询报表
ResultSet rs = stmt.executeQuery(query);
i = 0;
//计算机构个数
while (rs.next()) {
i++;
}