ต่อไปนี้เป็นข้อดีของกระบวนงานที่เก็บไว้:
-
เนื่องจากกระบวนงานที่เก็บไว้จะถูกรวบรวมและจัดเก็บ เมื่อใดก็ตามที่คุณเรียกใช้โพรซีเดอร์ การตอบสนองจึงรวดเร็ว
-
คุณสามารถจัดกลุ่มคำสั่ง SQL ที่จำเป็นทั้งหมดในโพรซีเดอร์และดำเนินการได้ในครั้งเดียว
-
เนื่องจากกระบวนงานจะถูกเก็บไว้ในเซิร์ฟเวอร์ฐานข้อมูลซึ่งเร็วกว่าไคลเอนต์ คุณสามารถดำเนินการเควสที่ซับซ้อนทั้งหมดได้โดยใช้มัน ซึ่งจะเร็วขึ้น
-
เมื่อใช้โพรซีเดอร์ คุณสามารถหลีกเลี่ยงการใช้โค้ดซ้ำๆ ได้ นอกจากนี้ คุณสามารถใช้ฟังก์ชัน SQL เพิ่มเติม เช่น การเรียกใช้ฟังก์ชันที่เก็บไว้ได้
-
เมื่อคุณคอมไพล์โพรซีเดอร์ที่เก็บไว้ คุณสามารถใช้มันในแอปพลิเคชั่นจำนวนเท่าใดก็ได้ หากต้องการเปลี่ยนแปลงใดๆ คุณสามารถเปลี่ยนขั้นตอนได้โดยไม่ต้องแตะรหัสแอปพลิเคชัน
-
คุณสามารถเรียกโพรซีเดอร์ที่เก็บไว้ PL/SQL จากโพรซีเดอร์ Java และ Java Stored จาก PL/SQL
ตัวอย่าง
สมมติว่าเราได้สร้างตารางชื่อพนักงานโดยมีคำอธิบายดังต่อไปนี้:
<ก่อนหน้า>+----------+--------------+------+----+------- ---+-------+| สนาม | พิมพ์ | Null | คีย์ | ค่าเริ่มต้น | พิเศษ |+----------+-------------+------+----+-------- --------+| ชื่อ | varchar(255) | ใช่ | | NULL | || เงินเดือน | int(11) | ไม่ | | NULL | || ที่ตั้ง | varchar(255) | ใช่ | | NULL | |+----------+-------------+------+----+--------- +-------+สมมติว่าเรามีขั้นตอนชื่อ myProcedure ซึ่งแทรกข้อมูลลงในตารางพนักงานเป็น:
สร้างโพรซีเดอร์ myProcedure (ในชื่อ VARCHAR(30), IN sal INT, IN loc VARCHAR(45)) -> BEGIN -> INSERT INTO Employees(Name, Salary, Location) VALUES (name, sal, loc); -> END //
การติดตามโปรแกรม JDBC เรียกใช้ขั้นตอนการจัดเก็บ Java ที่กล่าวถึงข้างต้น
<ก่อน> นำเข้า java.sql.CallableStatement นำเข้า java.sql.Connection นำเข้า java.sql.DriverManager นำเข้า java.sql.SQLException ตัวอย่างคลาสสาธารณะ { โมฆะสาธารณะหลัก (สตริง args []) พ่น SQLException { // การลงทะเบียนไดร์เวอร์ DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //รับการเชื่อมต่อสตริง mysqlUrl ="jdbc:mysql://localhost/testdb"; การเชื่อมต่อ con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println("การเชื่อมต่อสำเร็จ......"); //การเตรียม CallableStatement CallableStatement cstmt =con.prepareCall("{call myProcedure(?, ?, ?)}"); cstmt.setString(1, "อามิต"); cstmt.setInt (2, 3000); cstmt.setString(3, "ไฮเดอราบาด"); cstmt.execute(); cstmt.setString(1, "กลยาน"); cstmt.setInt(2, 4000); cstmt.setString(3, "วิศาขาปัตตนัม"); cstmt.execute(); }}ผลลัพธ์
เชื่อมต่อแล้ว......
หากคุณตรวจสอบเนื้อหาในตารางพนักงาน คุณจะพบแถวที่เพิ่มใหม่ดังแสดงด้านล่าง:
<ก่อนหน้า>+-----------+---------+----------------+| ชื่อ | เงินเดือน | ที่ตั้ง |+-----------+----------------------+----------------+| อามิต | 3000 | ไฮเดอราบัด || กัลยัน | 4000 | วิศาขาปัตตนัม |+-----------+-------+----------------+