SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。
存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
存储函数的其实和存储过程差不多。 语法:
create[or replace] function 存储函数的名字(参数名 in|out 参数类型...) return 参数类型 is|as begin end;调用存储函数:
declare vsal number; begin vsal :=fun_test1(7369); dbms_output.put_line(vsal); end;JDBC调用存储过程:
//1、导入驱动包 //2、注册驱动 Class.forName("oracle.jdbc.OracleDriver"); //3、获取连接 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "wsh", "wsh"); //4、获取执行sql的statement对象,封装参数,执行sql String sql="{call proc_gettotalsal(?,?)}"; CallableStatement statement = conn.prepareCall(sql); //设置输入参数 statement.setInt(1, 7788); //注册输出参数 statement.registerOutParameter(2, OracleTypes.NUMBER); //执行statement对象 statement.execute(); //5、获取结果,输出参数是几,获取的就是几 int totalsal = statement.getInt(2); //输出结果:工资前和工资后 System.out.println("工资"+totalsal); //6、释放资源 statement.close(); conn.close(); ``` **JDBC调用存储函数**: ```java //1、导入驱动包 //2、注册驱动 Class.forName("oracle.jdbc.OracleDriver"); //3、获取连接 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "wsh", "wsh"); //4、获取执行sql的statement对象,封装参数,执行sql String sql="{?= call func_getsal(?)}"; CallableStatement statement = conn.prepareCall(sql); //5、获取结果 //设置输出参数 statement.registerOutParameter(1, OracleTypes.NUMBER); //设置输入参数 statement.setInt(2, 7788); //执行sql statement.execute(); int totalsal = statement.getInt(1); System.out.println("年薪工资:"+totalsal); //6、关闭资源 statement.close(); conn.close();