ป้ายกำกับ: Delimiter

SQL: PL/pgSQL, PL/SQL, SQL/PSM ,T-SQLSQL: PL/pgSQL, PL/SQL, SQL/PSM ,T-SQL

แม้ว่าทั้ง 4 ภาษาจะเป็นส่วนขยายของ SQL เพื่อให้เขียนโปรแกรมแบบ Procedural ได้ แต่แต่ละตัวก็มีที่มาและ Syntax เฉพาะตัวดังนี้ครับ


ตารางเปรียบเทียบ Procedural SQL Dialects

คุณสมบัติPL/SQLT-SQLPL/pgSQLSQL/PSM
เจ้าของ / หลักOracleMicrosoft PostgreSQLISO / IEC Standard
ความโดดเด่นแข็งแกร่ง, จัดการ Error ดีมากใช้งานง่าย, เน้นความเร็วยืดหยุ่นสูง, ขยายได้ง่ายเป็นมาตรฐานกลาง
รูปแบบโครงสร้างBlock-based Script-based Block-based Block-based
การประกาศตัวแปรใช้ Keyword DECLAREใช้ @ นำหน้าชื่อตัวแปรใช้ Keyword DECLAREใช้ Keyword DECLARE
การส่งค่าคืนOUT parameters หรือ RETURNSELECT ทิ้งไว้ได้เลย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 เลยรู้สึกว่ามันเป็นอะไรที่เข้าใจง่ายที่สุดแล้ว

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