ป้ายกำกับ: Database Architecture

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

ในโลกของการพัฒนาซอฟต์แวร์ที่ต้องมีการจัดการข้อมูล (Data Management) การทำความเข้าใจความแตกต่างระหว่างภาษา SQL และภาษาเชิงกระบวนการ (Procedural Language) เป็นสิ่งสำคัญอย่างยิ่ง โดยเฉพาะอย่างยิ่งเมื่อทำงานกับฐานข้อมูลอย่าง PostgreSQL

แม้ว่าทั้งสองภาษาจะถูกใช้เพื่อสื่อสารกับฐานข้อมูล แต่มีหน้าที่และโครงสร้างที่แตกต่างกันโดยสิ้นเชิง หากเปรียบเทียบง่าย ๆ คือ SQL คือ “ภาษาที่ใช้สั่งการข้อมูล (What to do) ส่วน PL/pgSQL คือ “ภาษาที่ใช้เขียนโปรแกรมเพื่อกำหนดขั้นตอน (How to do)


1. SQL (Structured Query Language): ภาษาแห่งการเรียกดูข้อมูล

SQL เป็นภาษามาตรฐานสากลที่ใช้สำหรับสื่อสารกับระบบฐานข้อมูลเชิงสัมพันธ์ (RDBMS) โดยมีจุดเน้นหลักคือการดึงข้อมูล การจัดการข้อมูล และการกำหนดโครงสร้างของตาราง

ลักษณะเด่นของ SQL:

  • Non-procedural: เราบอกแค่ว่าต้องการข้อมูลอะไร (What) แต่ไม่ได้บอกขั้นตอนการทำงาน (How)
  • การทำงาน: ประมวลผลเป็นชุดคำสั่งที่เน้นผลลัพธ์ (Result Set) เช่น การดึงข้อมูลทั้งหมด, การเพิ่มแถวใหม่, หรือการอัปเดตข้อมูล
  • คำสั่งหลัก: ประกอบด้วยคำสั่งพื้นฐาน เช่น SELECT, INSERT, UPDATE, และ DELETE

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

SQL

-- ต้องการดึงชื่อสินค้าที่ราคาสูงกว่า 100 บาท</code><code class="language-sql">SELECT product_name, price FROM products WHERE price > 100;

2. PL/pgSQL: การเขียนโปรแกรมในฐานข้อมูล

PL/pgSQL (Procedural Language/PostgreSQL) คือส่วนขยายที่นำความสามารถของภาษาโปรแกรมมิ่ง (Procedural) มาผสานรวมกับความสามารถของ SQL ทำให้เราสามารถเขียน Logic ที่ซับซ้อนได้ภายในฐานข้อมูล

ลักษณะเด่นของ PL/pgSQL:

  • Procedural: สามารถกำหนดขั้นตอนการทำงาน (Step-by-step) ได้อย่างชัดเจน
  • การควบคุม Flow: รองรับโครงสร้างการควบคุมที่ซับซ้อน เช่น IF-ELSE (เงื่อนไข), LOOP (การวนซ้ำ), และการจัดการตัวแปร (Variables)
  • การใช้งาน: มักใช้ในการสร้าง Stored Procedures, Functions, หรือ Triggers เพื่อให้ฐานข้อมูลทำงานอัตโนมัติเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น

ตัวอย่างการใช้งาน PL/pgSQL ใน PostgreSQL (ใช้ DO block):

SQL

-- ตัวอย่างการตรวจสอบและอัปเดตข้อมูลตามเงื่อนไข</code><code class="language-sql">DO $$</code><code class="language-sql">DECLARE</code><code class="language-sql">    v_product_id INTEGER := 1;</code><code class="language-sql">BEGIN</code><code class="language-sql">    IF EXISTS (SELECT 1 FROM products WHERE product_id = v_product_id) THEN</code><code class="language-sql">        UPDATE products SET stock = stock - 1 WHERE product_id = v_product_id;</code><code class="language-sql">        RAISE NOTICE 'Stock updated successfully.';</code><code class="language-sql">    ELSE</code><code class="language-sql">        RAISE EXCEPTION 'Product ID % not found.', v_product_id;</code><code class="language-sql">    END IF;</code><code class="language-sql">END $$ LANGUAGE plpgsql;

บทสรุป: เมื่อไหร่ควรใช้ภาษาใด?

การเลือกใช้ภาษาขึ้นอยู่กับเป้าหมายงาน (Goal) ของคุณ:

  • ใช้ SQL เมื่อ: คุณต้องการเพียงแค่การเรียกดูข้อมูล การกรองข้อมูล หรือการเปลี่ยนแปลงข้อมูลพื้นฐาน (CRUD Operations)
  • ใช้ PL/pgSQL เมื่อ: คุณต้องการสร้างระบบอัตโนมัติที่ซับซ้อน มีการตรวจสอบเงื่อนไข (Validation) หรือต้องมีการวนซ้ำเพื่อประมวลผลข้อมูลจำนวนมาก

โดยสรุปแล้ว SQL และ PL/pgSQL ไม่ได้มาแทนที่กัน แต่ทำงานร่วมกัน โดย SQL จะทำหน้าที่เป็นเครื่องมือในการจัดการข้อมูลหลัก ส่วน PL/pgSQL จะทำหน้าที่เป็นสมองที่ควบคุมการทำงานทั้งหมดให้เป็นไปตามขั้นตอนที่กำหนด