Wednesday 29 August 2007

เรียนรู้ PL/SQL ตอนที่ 1

ปกติ Database ที่เป็น Relational Database ทุกตัวจะมีภาษา SQL (Structured Query Language) ที่ใช้ในการเข้าถึงข้อมูลและจัดการข้อมูลใน Database

SQL เป็นภาษาที่เรียนรู้ได้ง่าย เมื่อเรียนรู้แล้วสามารถนำไปใช้ได้กับทุก ๆ Database
แต่ใช่ว่าทุก ๆ Database จะมี Syntax SQL ที่เหมือนกันซะทีเดียว อาจจะมี Syntax บางอย่างที่แตกต่างกันบ้าง
เช่น Database ของ Microsoft ซึ่งเป็นที่รู้กันอยู่ว่ารายนี้ชอบแต่งเติมมาตรฐานเดิมที่อยู่ให้มี Function ที่มากขึ้น เช่น Constraint ON UPDATE CASCADE ที่จะมีอยู่ใน SQL Server เท่านั้นในขณะที่ Oracle ไม่มี
//แต่โดยร่วมก็เหมือนกันเกือบ 95%

ถามว่านั้นเพียงพอแล้วหรือยังสำหรับในการจัดการข้อมูลใน Database คำตอบคือ “ไม่”

เนื่องจากว่าคำสั่ง SQL หน้าที่หลัก ก็คือใช้ในการ Select, Insert, Update, Delete ธรรมดา อาจจะใส่การคิดคำนวณเล็ก ๆ น้อย ๆ ได้ แต่ก็ไม่เพียงพอกับ Business Logic ที่ซับซ้อน จึงต้องเป็นภาระของงานในฝั่ง Programming

สามารถ manage เกี่ยวกับ Relational Database ที่มี Business logic ไม่ซับซ้อนมากนัก เพราะว่า SQL นั้นไม่มี Control Statement ที่ใช้ในการควบคุม Condition ของ SQL Statement และไม่มี Function และ Procedure เหมือนกับ Language Programming อื่นๆที่รวบรวม SQL Statement และ Control Statement ไว้เป็น Function เดียวกันเพื่อรองรับกับ Business logic ที่มีความซับซ้อนมากๆ

ทำให้ SQL ไม่เพียงพอสำหรับในการแก้ปัญหานี้ การแก้ปัญหามีสองวิธีคือ โยนภาระนี้ไปให้ Model (Model ใน MVC) ของฝั่ง Application นั้นไปทำการแก้ปัญหานี้เอง หรืออีกวิธีหนึ่งคือ ให้ Procedural extensions จัดการกับปัญหานี้ซึ่งในแต่ละค่ายของ Database นั้นก็จะมี Procedural extensions ที่เป็นของตนเอง ซึ่ง Procedural extensions ของ Oracle นั้นก็คือ PL/SQL

What is PL/SQL

PL/SQL นั้นเป็นภาษาที่เป็น Procedure Language ซึ่งก็จะเป็นเหมือนภาษาทั่วไปคือก็จะมี Control Statement สามารถสร้าง Function ได้และสามารถจัดการเกี่ยวกับ Exception ได้ซึ่ง PL/SQL ตัวนี้จะอยู่ฝังอยู่ใน product หลายๆ product ของ Oracle ไม่ว่าจะเป็น Oracle Form, Oracle Report, Oracle Portal และสามารถใช้ร่วมกับ SQL เพื่อที่จะเพิ่มศักยภาพในการจัดการ Database ของเราได้มากขึ้น หากลองสักเกตุดูดี ๆ ใครที่คิดจะจับ product เกี่ยวกับ Oracle จริง ๆ จัง ๆ ก็ควรที่จะมีพื้นฐานด้าน PL/SQL ที่ดี

Why use PL/SQL in Oracle Database

เนื่องจากว่า Oracle Database นั้นเป็น Database ที่เป็นระบบใหญ่มากบางครั้งการโยนภาระไปให้ Model จัดการกับ Business logic ที่มีควารมซับซ้อนนั้นอาจจะไม่เหมาะเพราะบางครั้ง Business logic นั้นอาจจะมีการติดต่อกับ Database บ่อยๆเช่น Business logic นั้นถ้ามีความซับซ้อนมากอาจจะมีคำสั่ง SQL หลาย Statement ซึ่ง SQL นั้นสามารถทำงานได้ทีละ Statement ดังนั้นถ้ามี 20 Statement แสดงว่า Application ต้องส่ง SQL ไปที่ละหนึ่ง Statement เพื่อให้ Database นั้นทำงานแล้วเมื่อเสร็จจึงค่อยส่งผลลัพธ์กลับมา Application ซึ่งต้องทำแบบนี้ส่งไปส่งมา 20 ครั้งซึ่งจะมี overhead อื่นๆตามมาอีก เช่น I/O ที่ใช้ในการถ่ายส่งข้อมูลหรือติดต่อ Database แต่ว่าถ้าเราโยน Business logic นั้นให้ PL/SQL นั้นทำหน้าที่แทนหละก็ต่อให้มีหลาย ๆ SQL statement ก็จะไม่มีปัญหาในด้านนี้คือมันจะทำงานอยู่ใน Database Server ตลอดไม่ต้องคอยเทียวไปเทียวมาในการส่งคำสั่ง SQL ไปกลับระหว่าง Application กับ Database จะทำให้ระยะเวลาที่ใช้ในการทำ Business logic นั้นลดลงไปได้

ก่อนที่จะเข้าถึง PL/SQL นั้นผมอยากจะให้ทำความเข้าใจความสัมพันธ์ของ PL/SQL และ SQL ว่ามีความสัมพันธ์กันอย่างไร

โดย PL/SQL และ SQL มีส่วนที่คาบเกี่ยวกันเพราะ PL/SQL นั้นจะสามารถควบคุม SQL ได้บางส่วนก็คือควบคุมในส่วนของ DML และ DCL ของ SQL ได้เท่านั้นส่วนนั้นคือคำสั่งจำพวก SELECT, INSERT, UPDATE, DELETE, COMMIT หรือ ROLLBACK เป็นต้น แต่ DDL นั้น PL/SQL นั้นไม่สามารถเรียกใช้ได้แต่ว่า Oracle ก็เปิดทางให้เรียกใช้ได้ถ้าจำเป็นต้องใช้จริง ๆ ซึ่งสามารถดูความสัมพันธ์นี้ได้ดังภาพด้านล่าง

No comments: