Friday 5 October 2007

วิธีการส่งค่าที่เป็น Array Object จาก Java ให้กับ PL/SQL ของ Oracle

ความสามารถที่โดดเด่นอย่างหนึ่งของ PL/SQL ในการติดต่อกับ Java คือการรับและส่ง Parameter เป็นแบบ Array Object

ทำให้นักพัฒนาโปรแกรมด้วยภาษา java สามารถส่ง parameters ให้กับ Store Procedure ได้เป็นจำนวนมาก กรณีนี้จะพบบ่อยใน Application ขนาดใหญ่

Enviroment ที่ใช้ในตัวอย่าง
  • Oracle Driver ที่ชื่อว่า ojdbc14.jar(ใช้กับ Oracle 10g)
  • Java SDK 1.4
  • Database schema ที่มี user คือ TEST_USER
  • import oracle.sql.ARRAY, oracle.sql.ArrayDescriptor ลงใน Class java
ตัวอย่างง่าย ๆ ที่จะนำมาเสนอในบทความนี้คือ

1. ใช้คำสั่ง create Array Object ขึ้นมาใน Database ก่อน ตัวอย่างเช่น

SQL> CREATE OR REPLACE TYPE OBJ_ARRAY AS TABLE OF NUMBER ;

(วิธีการ create นั้นต้องlogin เข้า database ก่อน ด้วย SQLPLUS หรือ tool ต่าง ๆ )

เราก้อจะได้ Array Object ที่ชื่อว่า OBJ_ARRAY ซึ่งเป็น Array ของ ตัวแปรที่มี type เป็น NUMBER(ตรงกับ datatype ที่อยู่ใน Java คือ BigDecimal )

เก็บอยู่ในฐานข้อมูล Oracle เพื่อให้ นักพํฒนาระบบ เรียกใช้

2. ใน class ของ Java นั้น จะแสดงตัวอย่างในส่วนของการเก็บข้อมูลลง Array Object ของ Java (ในที่นี้คือ BigDecimal)

# test.java class

..................

..................

BigDecimal [] bigArr = {new BigDecimal(1),new BigDecimal(2),new BigDecimal(3)};
// สร้าง Instance ของ BigDecimal array ที่ชื่อ ว่า bigArr มีสมาชิก 3 ตัว มีค่า {1,2,3}

2.1

ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TEST_USER.OBJ_ARRAY", conn);

// conn คือ Instance ของ Connection Class ที่ใช้ต่อต่อกับ Database, user ใน database คือ TEST_USER
// คำสั่งนี้เพื่อ Mapping array Instance ของทั้ง java และInstance ที่อยู่ในDatabase

2.2

ARRAY array = new ARRAY(descriptor, conn, bigArr);
// สร้าง Instance ที่ชื่อว่า array ซึ่งสามารถ โยนไปให้ Store Procedure ใน PL/SQL ประมวลผลต่อไป

นี่เป็นตัวอย่างคร่าว ๆ สำหรับเป็นแนวทางให้ผู้ที่สนใจศึกษาต่อ ในครั้งหน้าเราจะมาเจาะลึกลงเนื้อหาในส่วนของการนำข้อมูล Array ที่ได้นี้ไปใช้ในส่วนของ PL/SQL ต่อไป

No comments: