什么是存储过程
- 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
- 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。
存储过程的优点
- 存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。
- 存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。
- 存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。
- 像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。
- 存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。
存储过程的调用
call my_proc('参数1值', '参数2值');
DECLARE
参数1 VARCHAR2(50) := '参数1值';
参数2 VARCHAR2(50) := '参数2值';
BEGIN
my_proc(参数1, 参数2);
END;
- 使用java
public class CallStoredProcedure {
public static void main(String[] args) throws Exception {
String driverName = "oracle.jdbc.driver.OracleDriver";
String connectionString = "jdbc:oracle:thin:@//localhost:1521/orcl";
String userName = "USERNAME";
String password = "PASSWORD";
String storedProcedure = "my_proc";
String param1 = "参数1值";
String param2 = "参数2值";
Class.forName(driverName);
Connection con = DriverManager.getConnection(connectionString, userName, password);
CallableStatement cst = con.prepareCall("{call " + storedProcedure + "(?,?)}");
cst.setString(1, param1);
cst.setString(2, param2);
cst.execute();
ResultSet rs = cst.getResultSet();
while (rs.next()) {
// 处理结果集
}
cst.close();
con.close();
}
}
参考
https://m.php.cn/faq/519415.html
https://blog.csdn.net/weixin_30819085/article/details/101741824