วันอังคารที่ 15 กันยายน พ.ศ. 2552

ตัวแปร Array ใน PL/SQL

ใน PL/SQL เราสามารถสร้างตัวแปร Array เพื่อใช้เก็บข้อมูลหลาย ๆ ค่าไว้ในตัวแปรชื่อเดียวกันโดยมี index หรือหมายเลขเป็นตัวกำกับชื่อตัวแปรนั้น ๆ การกำหนดตัวแปรลักษณะนี้ทำให้เราสามารถอ้างอิงค่าในตัวแปร Array ได้หลายค่าพร้อม ๆ กันโดยการอ้างชื่อตัวแปรพร้อมกับหมายเลขกำกับ เช่น Array(1), Array(2), Array(3) เป็นต้น ทำให้เราสามารถพัฒนาโปรแกรมได้ยืดหยุ่นมากขึ้น

ตัวอย่างเช่น

01 DECLARE
02 Type phone_no_array is varray(4) of varchar2(20);
03 phone_no phone_no_array;
04 BEGIN
05 phone_no := phone_no_array('024561203','023895542','024357890','026987852');
06 DBMS_OUTPUT.PUT_LINE(phone_no(1));
07 DBMS_OUTPUT.PUT_LINE(phone_no(2));
08 DBMS_OUTPUT.PUT_LINE(phone_no(3));
09 DBMS_OUTPUT.PUT_LINE(phone_no(4)):
10* END;
SQL>/
024561203
023895542
024357890
026987852

จากตัวอย่างข้างบนในบันทัดที่ 2 เป็นการกำหนดชนิดตัวแปร Array ชื่อ phone_no_array ขนาด 4 สมาชิกโดยเก็บข้อมูลเป็น varchar2 และในบันทัดที่ 3 กำหนดให้ตัวแปร phone_no มี data type เป็น phone_no_array จากนั้นในบันทัดที่ 5 จะเป็นการกำหนดค่าเริ่มต้นให้กับตัวแปร phone_no ทั้งหมด 4 ค่า และในบันทัดที่ 6-10 เป็นการแสดงผลลัพธ์ของค่าในตัวแปร phone_no ออกมาทั้ง 4 ค่า โดยอ้างอิงชื่อตัวแปรและหมายเลขกำกับตัวแปร เช่น phone_no(1), phone_no(2) เป็นต้น

ลองมาดูกันอีกซักหนึ่งตัวอย่าง

01 DECLARE
02 Type num_array is varray(100) of number;
03 num num_array := num_array();
04 BEGIN
05 num.extend(100);
06 FOR I in 1..100 LOOP
07 num(I) := I;
08 END LOOP;
09* END

ตัวอย่างนี้เป็นการกำหนดค่าเริ่มต้นให้ตัวแปร Array ที่ชื่อว่า num ซึ่งเป็น Array ว่าง ๆ ขนาด 100 สมาชิกโดยในบันทัดที่ 3 ไม่ได้มีการกำหนดค่าของสมาชิกให้กับ Array เหมือนในตัวอย่างแรก ดังนั้นหากเราต้องการใช้งานตัวแปร Array เราจะต้องทำการ extend ก่อนจึงจะใช้งานได้ ในที่นี้บันทัดที่ 5 เป็นการ extend เพื่อใช้งาน array จำนวน 100 ค่า จากนั้นบันทัดที่ 6-8 จะเป็นการวนลูปเพื่อนำเอาค่า 1 ถึง 100 ใส่ลงไปใน Array ตามลำดับ ด้วยวิธีการนี้ทำให้เราสามารถกำหนดค่าให้กับ Array แบบ dynamic ได้โดยไม่ต้องมากำหนดค่าคงที่ให้กับ Array แต่ละตัวเหมือนกับตัวอย่างแรก

2 ความคิดเห็น:

  1. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  2. ถ้าต้องการกำหนดค่า array แบบรับค่ามาอะคะ ไม่ได้กำหนดขนาดตายตัวว่าเป็น arry(100) แล้วแต่ว่าเราจะรับค่ามาเท่สไรอะคะ อาจจะน้อยกว่า หรือมากกว่า 100 ไม่ทราบเขียนยังไงคะ อยากได้ตัวอย่างอะคะ

    ตอบลบ