Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sự khác biệt giữa SQL và PL/SQL (Oracle)

SQL (Structured Query Language) là ngôn ngữ khai báo chuẩn cho cơ sở dữ liệu quan hệ — chỉ định lấy/cập nhật cái gì. PL/SQL (Procedural Language/SQL) là ngôn ngữ thủ tục mở rộng của Oracle — thêm biến, vòng lặp, điều kiện, exception handling, cho phép viết logic nghiệp vụ phức tạp chạy ngay trên database server.

Bảng so sánh chi tiết

#Tiêu chíSQLPL/SQL
1Định nghĩaNgôn ngữ truy vấn cấu trúc cho databaseNgôn ngữ lập trình dùng SQL cho database
2BiếnKhông có biếnCó biến, kiểu dữ liệu, hằng, record, collection
3Cấu trúc điều khiểnKhông có IF, LOOP, FORCó IF, CASE, FOR LOOP, WHILE LOOP, GOTO
4Thực thiMột câu lệnh một lầnNhiều câu lệnh trong một khối (block)
5Loại ngôn ngữKhai báo (Declarative)Thủ tục (Procedural)
6Nhúng lẫn nhauSQL nhúng trong PL/SQL blockPL/SQL cũng có thể nhúng trong SQL (function trong SELECT)
7Tương tác DB ServerTrực tiếpKhông trực tiếp (chạy trong PL/SQL engine)
8Định hướngDữ liệu (Data-oriented)Ứng dụng (Application-oriented)
9Mục đíchViết query, DDL, DMLViết block, function, procedure, trigger, package

Ví dụ minh họa

SQL thuần: Chỉ truy vấn

DECLARE
    v_bonus_rate NUMBER := 0.10;
    v_total_bonus NUMBER := 0;
BEGIN
    FOR rec IN (SELECT EmployeeId, Salary FROM Employees WHERE DepartmentId = 10) LOOP
        v_total_bonus := v_total_bonus + (rec.Salary * v_bonus_rate);
        UPDATE Employees SET Bonus = rec.Salary * v_bonus_rate WHERE EmployeeId = rec.EmployeeId;
    END LOOP;
    
    INSERT INTO BonusLog (DeptId, TotalBonus, CalcDate) VALUES (10, v_total_bonus, SYSDATE);
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
END;

Kiến trúc thực thi

  • SQL Engine: Phân tích, tối ưu, thực thi câu lệnh SQL đơn lẻ.
  • PL/SQL Engine: Thực thi logic thủ tục, gọi SQL Engine cho các câu SQL bên trong. Giảm network round-trip giữa app và DB.

Tương đương ở các RDBMS khác

RDBMSNgôn ngữ thủ tục
OraclePL/SQL
SQL ServerT-SQL
PostgreSQLPL/pgSQL
MySQLMySQL Stored Programs (SQL/PSM)
DB2SQL PL

Khi nào dùng PL/SQL?

  • Logic nghiệp vụ phức tạp: validation, tính toán nhiều bước, workflow.
  • Cần transaction control tường minh (COMMIT/ROLLBACK/SAVEPOINT).
  • Cần exception handling (TRY-CATCH).
  • Hiệu năng: Gom nhiều SQL thành một lần gọi từ ứng dụng.
  • Bảo mật: Ẩn logic, chỉ cấp quyền EXECUTE trên procedure.