以下是存储过程的优点:
由于存储过程是编译和存储的,因此无论何时调用过程,响应都很快。
您可以将所有必需的SQL语句组合在一个过程中,然后立即执行它们。
由于过程存储在数据库服务器上,因此比客户端要快。您可以使用它执行所有复杂的查询,这将更快。
使用过程,您可以避免重复代码,而且可以使用其他SQL功能(如调用存储的函数)。
编译存储过程后,即可在许多应用程序中使用它。如果需要任何更改,您可以更改过程而无需触摸应用程序代码。
您可以从Java调用PL / SQL存储过程,并从PL / SQL调用Java存储过程。
假设我们已经创建了一个名为Employees的表,并具有以下描述:
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| Name | varchar(255) | YES | | NULL | |
| Salary | int(11) | NO | | NULL | |
| Location | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
假设我们有一个名为myProcedure的过程,该过程将数据插入到Employees表中,如下所示:
Create procedure myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45))
-> BEGIN
-> INSERT INTO Employees(Name, Salary, Location) VALUES (name, sal, loc);
-> END //
以下JDBC程序调用上述Java存储过程。
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Example {
public static void main(String args[]) throws SQLException {
//Registering the Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//Getting the connection
String mysqlUrl = "jdbc:mysql://localhost/testdb";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
//Preparing a CallableStatement
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
cstmt.setString(1, "Amit");
cstmt.setInt(2, 3000);
cstmt.setString(3, "Hyderabad");
cstmt.execute();
cstmt.setString(1, "Kalyan");
cstmt.setInt(2, 4000);
cstmt.setString(3, "Vishakhapatnam");
cstmt.execute();
}
}
Connection established......
如果验证Employees表的内容,则可以找到新添加的行,如下所示:
+-----------+--------+----------------+
| Name | Salary | Location |
+-----------+--------+----------------+
| Amit | 3000 | Hyderabad |
| Kalyan | 4000 | Vishakhapatnam |
+-----------+--------+----------------+