PlusMagi's Blog By Pitt Phunsanit Oracle Database,RDBMS Oracle: PL/SQL (Procedural Language /Structured Query Language )

Oracle: PL/SQL (Procedural Language /Structured Query Language )

ในการทำงานกับฐานข้อมูล Oracle คุณจะพบทั้ง SQL และ PL/SQL ซึ่งถึงแม้จะชื่อคล้ายกันและทำงานร่วมกัน แต่มีหน้าที่และโครงสร้างที่ต่างกันอย่างสิ้นเชิงครับ

สรุปสั้น ๆ คือ SQL เป็น “ภาษาที่ใช้สั่งการ” (What to do) ส่วน PL/SQL เป็น “ภาษาที่ใช้เขียนโปรแกรม” (How to do)


SQL (Structured Query Language)

SQL เป็นภาษามาตรฐานที่ใช้สื่อสารกับฐานข้อมูลแบบ Relational Database (RDBMS) โดยเน้นไปที่ผลลัพธ์

  • ลักษณะเด่น: เป็น Non-procedural language คือเราบอกแค่ว่า “ต้องการข้อมูลอะไร” แต่ไม่ได้บอกว่า “ต้องทำอย่างไร (Step-by-step) “
  • การทำงาน: ประมวลผลทีละคำสั่ง (Single statement) เช่น SELECT, INSERT, UPDATE, DELETE
  • ข้อจำกัด: ไม่สามารถเขียน logic ที่ซับซ้อนอย่าง Loop หรือ If-Else ภายในคำสั่ง SQL ชุดเดียวได้

PL/SQL (Procedural Language / SQL)

PL/SQL เป็นส่วนขยายของ Oracle ที่นำความสามารถของภาษาโปรแกรมมิ่ง (Procedural) มาใส่ใน SQL

  • ลักษณะเด่น: เป็น Procedural language ที่รวมเอา SQL เข้ามาไว้ด้วยกัน ช่วยให้เขียน Logic ซับซ้อนได้
  • การทำงาน: ประมวลผลเป็น “Block” (ชุดของคำสั่ง) ซึ่งจะถูกส่งไปที่ฐานข้อมูลในครั้งเดียว ช่วยลดทอน Traffic ระหว่าง Application กับ Database
  • ฟีเจอร์เด่น: มีตัวแปร (Variables) , การจัดการข้อผิดพลาด (Exception Handling) , การวนลูป (Loops) , และเงื่อนไข (Conditions)

ตารางเปรียบเทียบความแตกต่าง

คุณสมบัติSQLPL/SQL
ประเภทภาษาDeclarative (สั่งสิ่งที่ต้องการ) Procedural (สั่งตามลำดับขั้นตอน)
หน่วยประมวลผลทีละหนึ่งคำสั่ง (Single query) เป็นบล็อก (Block of code)
Logic Controlไม่มี (ทำไม่ได้) มี IF-THEN-ELSE, LOOP, FOR
ตัวแปรไม่สามารถประกาศตัวแปรใช้งานเองได้ประกาศตัวแปรและเก็บค่าได้
การประมวลผลประมวลผลที่ SQL Engineประมวลผลที่ PL/SQL Engine
ความผิดพลาดแสดง Error ทันทีมีส่วน Exception Handling เพื่อจัดการ Error

ตัวอย่างการใช้งาน


ตัวอย่าง SQL

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;
(สั่งให้เพิ่มเงินเดือน 10% สำหรับแผนก 10 เท่านั้น


ตัวอย่าง PL/SQL

DECLARE v_bonus NUMBER;
BEGIN SELECT salary * 0.5 INTO v_bonus FROM employees WHERE employee_id = 101; IF v_bonus > 5000 THEN UPDATE employees SET salary = salary + 5000 WHERE employee_id = 101; ELSE UPDATE employees SET salary = salary + v_bonus WHERE employee_id = 101; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('ไม่พบข้อมูลพนักงาน') ;
END;

(มีการตรวจสอบเงื่อนไขก่อนอัปเดต และมีการดักจับข้อผิดพลาดหากไม่พบข้อมูล)


สรุป

ถ้าคุณต้องการแค่ดึงข้อมูลหรือแก้ไขข้อมูลทั่วไป SQL คือคำตอบ แต่ถ้าคุณต้องสร้าง Business Logic ที่ซับซ้อนภายใน Database หรือต้องการสร้าง Stored Procedures, Functions, และ Triggers คุณจำเป็นต้องใช้ PL/SQL ครับ


อ่านเพิ่มเติม