แม้ว่าทั้ง 4 ภาษาจะเป็นส่วนขยายของ SQL เพื่อให้เขียนโปรแกรมแบบ Procedural ได้ แต่แต่ละตัวก็มีที่มาและ Syntax เฉพาะตัวดังนี้ครับ
ตารางเปรียบเทียบ Procedural SQL Dialects
| คุณสมบัติ | PL/SQL | T-SQL | PL/pgSQL | SQL/PSM |
| เจ้าของ / หลัก | Oracle | Microsoft | PostgreSQL | ISO / IEC Standard |
| ความโดดเด่น | แข็งแกร่ง, จัดการ Error ดีมาก | ใช้งานง่าย, เน้นความเร็ว | ยืดหยุ่นสูง, ขยายได้ง่าย | เป็นมาตรฐานกลาง |
| รูปแบบโครงสร้าง | Block-based | Script-based | Block-based | Block-based |
| การประกาศตัวแปร | ใช้ Keyword DECLARE | ใช้ @ นำหน้าชื่อตัวแปร | ใช้ Keyword DECLARE | ใช้ Keyword DECLARE |
| การส่งค่าคืน | OUT parameters หรือ RETURN | SELECT ทิ้งไว้ได้เลย | RETURNS SETOF หรือ TABLE | ตามมาตรฐาน SQL |
เจาะลึกแต่ละภาษา
PL/SQL
เป็นภาษาที่มีโครงสร้างเข้มงวด คล้ายภาษา Pascal
- จุดแข็ง: การทำ Package และการจัดการ Exception ที่ละเอียดมาก
- ตัวอย่าง: ต้องประกาศตัวแปรในส่วน
DECLAREก่อนเสมอ ไม่สามารถประกาศกลางทางได้
T-SQL
ย่อมาจาก Transact-SQL เน้นความกระชับและสะดวกในการเขียน Script
- จุดแข็ง: คุณสามารถเขียน
SELECT * FROM Tableกลาง Procedure เพื่อให้มันคืนค่าเป็น Result Set ออกมาที่หน้าจอได้ทันที - เอกลักษณ์: ตัวแปรต้องมี
@นำหน้าเสมอ เช่น@myVariable
PL/pgSQL
ถูกออกแบบมาให้คล้าย PL/SQL ของ Oracle มาก เพื่อให้คนย้ายมาใช้ Postgres ได้ง่าย
- จุดแข็ง: รองรับการทำงานกับ JSON, Array และข้อมูลสมัยใหม่ได้ดีเยี่ยม และสามารถเขียน Function ด้วยภาษาอื่น มาใช้งานร่วมกันได้
- เอกลักษณ์: โครงสร้างบล็อกจะปิดท้ายด้วย
$$เพื่อป้องกันปัญหากับเครื่องหมาย Single Quote ใน String
SQL/PSM
ย่อมาจาก Persistent Stored Modules เป็นมาตรฐานกลางของ ISO ที่ MySQL นำมาปรับใช้
จุดแข็ง: เป็นมาตรฐานสากลที่สุด แต่ในแง่ฟีเจอร์อาจจะไม่หวือหวาเท่า Oracle หรือ SQL Server
เอกลักษณ์: มักจะเห็นการใช้ DELIMITER // เพื่อเปลี่ยนตัวปิดคำสั่งชั่วคราวเวลาสร้าง Procedure ใน MySQL
สรุปสำหรับการทำงาน
- ถ้าต้องทำ Migration: การย้ายจาก Oracle ไป PostgreSQL จะเจ็บตัวน้อยที่สุดเพราะ Syntax ใกล้เคียงกันมาก
- ถ้าเน้นความเร็วในการ Dev: T-SQL ของ SQL Server มักจะเขียนได้ไวและ Debug ง่ายกว่าในสายตา Dev หลายคน
- ถ้าเน้น Standard: หากต้องการให้ Code เป็นกลางที่สุด SQL/PSM คือแนวทางนั้นครับ แต่ตอนเรียนให้เค้าลองทำ MySQL database เลยรู้สึกว่ามันเป็นอะไรที่เข้าใจง่ายที่สุดแล้ว
อ่านเพิ่มเติม