PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PL / pgSQL và SQL trong PostgreSQL có cùng cấp với chuẩn SQL / PSM, thay vì chỉ chuẩn SQL không?

Để làm rõ các thuật ngữ:

SQL là một truy vấn ngôn ngữ được sử dụng để chọn, cập nhật, xóa hoặc tạo dữ liệu trong cơ sở dữ liệu quan hệ. Nó không có phần tử thủ tục như vòng lặp ( FOR , WHILE ) hoặc câu lệnh có điều kiện ( IF , ELSE ) hoặc các biến hoặc con trỏ.

TẠO CHỨC NĂNG thực sự là một "câu lệnh SQL" nhưng chỉ đơn thuần là một "trình bao bọc" để chỉ định một khối mã được thực thi bởi một thứ khác với "công cụ" truy vấn SQL. Postgres (không giống như các DBMS khác) hỗ trợ nhiều "công cụ thời gian chạy" có thể thực thi khối mã đã được chuyển đến câu lệnh "CREATE FUNCTION" - một giả thiết là mã thực sự là một chuỗi nên CREATE FUNCTION chỉ nhìn thấy một chuỗi, không có gì khác.

Vì SQL không có phần tử thủ tục, bạn không thể trộn mã thủ tục và mã SQL. Nếu bạn muốn chạy mã thủ tục, bạn cần cho máy chủ biết rằng bạn đang chuyển đổi "động cơ" bằng cách nào đó. Điều này được thực hiện thông qua (SQL) DO lệnh này một lần nữa lấy một chuỗi mà nó không biết phải làm gì, gửi nó đến máy chủ và nói "đây là một đoạn mã mà người dùng tuyên bố rằng công cụ 'xyz' có thể thực thi" - xyz là PL / pgSQL, Python, Perl hoặc một cái gì đó hoàn toàn khác.

Điều này giống như một khối PL / SQL ẩn danh trong Oracle mà bạn bắt đầu bằng DECLARE - mọi thứ sau đó được thực thi bởi một công cụ thời gian chạy khác trên máy chủ. MySQL không có tính năng như vậy. Cách duy nhất để chạy mã thủ tục là tạo một thủ tục (hoặc hàm), sau đó chạy nó. Đó là lý do tại sao không có cái gọi là DO trong MySQL.

Sản phẩm DBMS duy nhất không phân biệt rõ ràng giữa mã thủ tục và "SQL thuần" là SQL Server:T-SQL là một phần mở rộng cho ngôn ngữ SQL cho phép bạn kết hợp "SQL thông thường" và SQL thủ tục mà không nói với phần phụ trợ rằng mã cần một công cụ khác để chạy (đây là một nguồn gây nhầm lẫn lớn cho những người di chuyển từ SQL Server sang Postgres hoặc Oracle).

SQL / PSM là một tiêu chuẩn xác định các phần tử thủ tục có thể được nhúng vào một công cụ cơ sở dữ liệu sử dụng SQL làm ngôn ngữ truy vấn của nó. Tôi biết không có sản phẩm DBMS nào thực sự triển khai SQL / PSM. PL / pgSQL của Postgres, PL / SQL của Oracle, phương ngữ thủ tục của MySQL có phần tương tự như vậy, nhưng không tuân thủ tiêu chuẩn SQL / PSM. Tôi nghĩ tiêu chuẩn gần nhất với tiêu chuẩn SQL / PSM là DB2 và có thể HSQLDB

Điều đó đúng. Nhưng sau đó, không DBMS triển khai đầy đủ tiêu chuẩn SQL - nhưng cách triển khai của Postgres có lẽ là tiêu chuẩn gần nhất với tiêu chuẩn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập các tệp XML vào PostgreSQL

  2. Các quyền PostgreSQL bị hạn chế cho ứng dụng web

  3. Tạo chuỗi khoảng thời gian trong tuần cho tháng nhất định

  4. Đặt giới hạn mặc định cho pg_trgm

  5. Phát hiện và xóa khoảng trống trong chuỗi thời gian