ข้อดีของ Stored Procedures:
คอมไพล์และเก็บไว้แล้ว เรียกใช้ตอบสนองเร็ว
รวมคำสั่ง SQL ที่ต้องการใน procedure เดียว รันครั้งเดียวจบ
รันบน database server ที่เร็วกว่า client เหมาะกับคำสั่งซับซ้อน
ลดซ้ำโค้ด ใช้ฟังก์ชัน SQL เพิ่มเติมได้ เช่น เรียก stored functions
คอมไพล์ครั้งเดียว ใช้ในหลายแอปพลิเคชัน เปลี่ยน procedure ได้โดยไม่ต้องแก้โค้ดแอป
เรียก PL/SQL stored procedures จาก Java และ Java stored procedures จาก PL/SQL ได้
ตัวอย่าง
ตาราง Employees:
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | Salary | int(11) | NO | | NULL | | | Location | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
Procedure myProcedure insert ข้อมูล:
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 เรียก procedure:
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 {
// ลงทะเบียน Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// เชื่อมต่อ
String mysqlUrl = "jdbc:mysql://localhost/testdb";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// เตรียม 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 | +-----------+--------+----------------+