1.存储过程
存储过程实际上就是一些编译好的sql语句集,而存储函数与存储过程的区别就是函数可以进行return返回,另一个规则就是:如果查询只有一个返回值或者数据那么优先用存储函数。
优点:
1.将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
2.批量处理:SQL+循环,减少流量,也就是“跑批”
3.统一接口,确保数据的安全
相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少
创建存储过程语法:
create [or replace] procedure 过程名 (参数列表) is PLSQL子程序体;
taps: is也可以替换成as
以Oracle中的emp表为例:创建名称为TestOne的存储过程输入参数 为epno,输出参数为psal,phiredate.
create or replace procedure TestOne(epno in number,
psal out number,
phiredate out date) as
begin
select sal,emp.hiredate into psal,phiredate from emp where emp.empno=epno;
end ;
在sqldeveloper中调用
set serveoutput on
exec TestOne(7839);
在java代码中调用原始JDBC形式
String sql ="{call TestOne(?,?,?)}"; //调用存储过程语法{call <procedure-name>[(<arg1>,<arg2>, ...)]}
Connection con = this.getConnection(); //自己封装好的JDBC连接
CallableStatement call=null; //CallableStatement 用来操作存储过程的接口
call = con.prepareCall(sql);
//对in 参数进行赋值
call.setInt(1, 7839);
//对out参数进行申明 两种方式获取类型 OracleTypes 还有 java.sql.types
call.registerOutParameter(2, OracleTypes.INTEGER);
call.registerOutParameter(3,java.sql.Types.DATE);
call.execute();
int sal = call.getInt(2);
Date date = call.getDate(3);
System.out.println(sal+"|"+date);
2.存储函数
函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN 子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。
创建存储函数语法:
create [or replace] function 函数名 (参数列表)
return 函数值类型
is PLSQL子程序体;
示例:输入一个员工编号,计算12个月的工资包括奖金,并返回
create or replace function queryEmp(peno in number)
return number
as
psal emp.sal%type;
pcomm emp.comm%type;
begin
select sal,comm into psal,pcomm from emp where empno=peno;
return psal*12+nvl(pcomm,0);
end;
在java代码中调用原始JDBC形式:
String sql ="{?= call queryemp(?)}"; //调用函数语法 {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
Connection con = this.getConnection();
CallableStatement call=null;
call = con.prepareCall(sql);
//对第一个?进行申明
call.registerOutParameter(1, OracleTypes.INTEGER);
call.setInt(2, 7839);
call.execute();
//获取返回的申明
int sal = call.getInt(1);
System.out.println(sal);