ผมก็ได้ไปลองศึกษาค้นคว้าหาข้อมูลมาดู ก็สามารถทำได้ดังนี้ครับ
ผมเขียน java ผ่าน Netbeans IDE 7.0 น่ะครับ ดูวิธีการเซตค่าต่างๆ ในหัวข้อ ติดตั้ง Oracle database 11g R1 (11.1.0.6.0) เพื่อใช้งาน กับ Netbeans IDE 7.0 และ ติดตั้ง Plugin iReport เพื่อการออกแบบรายงาน บน windows 7
เดี๋ยวเรามาลองสร้าง strored function ใน oracle database 11g R2 กันดู (พอดีผมใช้ R2 , R2 ก็ไม่ได้แตกต่างอะไรมากกับ R1 หรอกครับ คล้ายๆกัน) ไปดูกันเลยครับ
ตอนแรกก็ run SQL Developer ขึ้นมาก่อน
จะมีหน้าต่าง Create PL/SQL Function โผล่ขึ้นมาครับ
ก็ให้เราตั้งชื่อฟังก์ชันแล้วก็ใส Return Type ให้มัน แล้วก็ OK ไป
ผมลองเขียนโค๊ดง่ายๆดูน่ะครับ เพื่อการทดสอบ
จากโค๊ดข้างบนที่ผมได้เขียนไว้ก็คือ ให้ทำการนับจำนวณนักศึกษาทั้งหมดในตาราง Student ว่ามีกี่คน ได้ผลลัพธ์ใส่ลงในตัวแปร counter และ return ค่าของ counter ออกจาก stored function
โค๊ดง่ายๆน่ะครับ ซึ่งตัวตาราง student นีัผมได้ทำการสร้างขึ้นมาอยู่ก่อนแล้ว
จากนั้นก็ทำการ compile โปรแกรมโดยคลิ๊กเมาส์ที่
ถ้าหากว่าโปรแกรมเราไม่มีอะไรผิดพลาด ตรงส่วนของ Running-Log ก็จะไม่แสดงอะไรออกมา
จากนั้นเราก็มาเขียนโปรแกรมทดสอบ stored function ที่เราได้เขียนขึ้นมาลองดูกันครับ
จากนั้นให้ไปที่ DBMS Output แล้วคลิ๊กที่
เพื่อให้ DBMS เราสามารถแสดงผลลัพธ์ของ script โปรแกรมที่เราเขียนไว้ได้
จากนั้นทำการ run script โดยคลิ๊กที่
ก็จะมี massege ว่า anonymous block completed แสดงขึ้นมา ว่าตอนนี้เราได้ทำการ run script เรียบร้อยแล้ว
(anonymous block คือ รูปแบบการเขียนโปรแกรมแบบหนึ่งของ PL/SQL ที่ไม่มีชื่อ ที่เราได้เขียนขึ้นเมื่อตะกี๊ครับ ที่เป็น begin ... end;
ส่วน stored function เป็น PL/SQL แบบ name block เพราะเราได้กำหนดชื่อมันไว้ว่า countstudent
การเขียน PL/SQL ต้องหาอ่านศึกษาเพิ่มเติมเอาเองน่ะครับ จะไม่ขอกล่าวในที่นี้)
จากนั้นให้ไปที่ DBMS Output เพื่อดูผลลัพธ์การทำงาน
ผลลัพธ์คือ มีข้อมูลจำนวนนักศึกษา 50 คนถูกเก็บไว้ในตาราง Student
เราลองมาดูจากตารางจริงดูครับ
ตอนนี้ เราทดสอบ PL/SQL ใน DBMS กันเสร็จเรียบร้อยแล้ว
เรามาเริ่มการเขียนโปรแกรมภาษา java เพื่อเรียก strored function ที่เราได้ทำการเขียนไว้กันดีกว่าครับ
ผมเคยกล่าวมาแล้วน่ะครับว่าผมใช้ Netbeans IDE 7.0 ขั้นตอนการติดตั้งและตั้งค่าต่างๆ ก็ได้บอกไปในตอนต้นแล้ว ตอนนี้อยู่ในช่วงเขียนโปรแกรมอย่างเดียวครับ
ส่วนหลักจริงๆของตัวโปรแกรมมีแค่นี้เองครับ
CallableStatement stm=con.prepareCall("Begin ? := countstudent(); End;"); stm.registerOutParameter(1,Types.INTEGER); stm.execute(); int counter=stm.getInt(1); System.out.println(counter);คลาส CallableStatement เป็น คลาสที่อยู่ใน library JDBC เอาไว้สำหรับเรียกใช้งาน PL/SQL ที่เราได้เขียนและเก็บไว้ในฐานข้อมูล
CallableStatement stm=con.prepareCall("Begin ? := countstudent(); End;");
เป็นการเขียนโค๊ดแบบที่เรียกว่า prepare(พรีแพร์) statement คือ เขียนโค๊ดไปก่อน แล้วจึงกำหนดค่าให้กับ พารามิเตอร์ทีหลัง โดยจะใช้สัญลักษณ์ ? เพื่อบอกว่าตรงนี้มีพารามิเตอร์ 1 ตัวที่เราจะกำหนดค่าให้กับมันทีหลัง
stm.registerOutParameter(1,Types.INTEGER);
บอกว่าให้กำหนดพารามิเตอร์ตัวที่ 1 ให้ทำหน้าที่เป็น output โดยเซต data type เป็น integer
stm.execute();
จากนั้น เอ็กซีคิวต์คำสั่ง(ให้คำสั่ง CallableStatement stm=con.prepareCall("Begin ? := countstudent(); End;"); ทำงาน)
int counter=stm.getInt(1);
รับค่าผลลัพธ์ที่ได้จากการทำงานมาจาก object stm ไปเก็บไว้ในตัวแปร counter
System.out.println(counter);
จากนั้นก็แสดงผลลัพธ์
ถ้าหากเราเขียนโปรแกรมเก็บไว้เป็น package
เวลาเรียกใช้งานก็เพียงแค่เขียนเป็น (ชื่อ package).(ชื่อ stored function) เช่น MSP.AGE(?);
แทน countstudent ใน CallableStatement stm=con.prepareCall("Begin ? := countstudent(); End;"); แค่นั้นเองครับ
อีกตัวอย่างนึงเพื่อให้เห็นภาพมากขึ้นครับ
ตัว function AGE ถูกเก็บไว้ใน package MSP ครับ ทำหน้าที่ในการคำนวณอายุ โดยเอาเวลาปัจจุบันลบออกด้วยเวลาที่เรากรอกเข้าไป
stm.registerOutParameter(1,Types.INTEGER);
? ตัวที่ 1 ให้เป็น output จากนั้นส่งผลลัพธ์ให้กับ age
stm.setString(2,Birthday );
? ตัวที่ 2 ในเป็นพารามิเตอร์ Birthday
ไม่มีความคิดเห็น:
แสดงความคิดเห็น