MySQL có hỗ trợ ngôn ngữ thủ tục không?

Chương này cung cấp tổng quan về SQL, Ngôn ngữ truy vấn có cấu trúc và PL/SQL, phần mở rộng thủ tục của Oracle cho SQL. Chương bao gồm

Để biết thông tin đầy đủ về PL/SQL, hãy xem

Ngôn ngữ truy vấn có cấu trúc (SQL)

SQL là một ngôn ngữ truy cập cơ sở dữ liệu rất đơn giản nhưng mạnh mẽ. SQL là ngôn ngữ phi thủ tục;

Nghiên cứu của IBM đã phát triển và định nghĩa SQL, và ANSI/ISO đã tinh chỉnh SQL thành ngôn ngữ chuẩn cho các hệ thống quản lý cơ sở dữ liệu quan hệ. SQL do Tập đoàn Oracle triển khai cho Oracle tuân thủ 100% ở Cấp độ đầu vào với ngôn ngữ dữ liệu SQL tiêu chuẩn ANSI/ISO 1992

Oracle SQL bao gồm nhiều phần mở rộng cho ngôn ngữ SQL tiêu chuẩn ANSI/ISO, đồng thời các công cụ và ứng dụng của Oracle cung cấp các lệnh bổ sung. Các công cụ Oracle SQL*Plus và Server Manager cho phép bạn thực thi bất kỳ câu lệnh SQL tiêu chuẩn ANSI/ISO nào đối với cơ sở dữ liệu Oracle, cũng như các lệnh hoặc chức năng bổ sung có sẵn cho các công cụ đó

Mặc dù một số công cụ và ứng dụng của Oracle đơn giản hóa hoặc che dấu việc sử dụng SQL, nhưng tất cả các thao tác cơ sở dữ liệu đều được thực hiện bằng SQL. Bất kỳ phương pháp truy cập dữ liệu nào khác sẽ phá vỡ bảo mật được tích hợp trong Oracle và có khả năng ảnh hưởng đến tính toàn vẹn và bảo mật dữ liệu

Xem để biết thêm thông tin về các lệnh SQL và các phần khác của SQL (ví dụ: các hàm) và để biết thêm thông tin về các lệnh Trình quản lý Máy chủ, bao gồm sự khác biệt của chúng với các lệnh SQL

Phần này bao gồm các chủ đề sau

Câu lệnh SQL

Tất cả các hoạt động được thực hiện trên thông tin trong cơ sở dữ liệu Oracle được thực thi bằng các câu lệnh SQL. Một câu lệnh SQL là một thể hiện cụ thể của một lệnh SQL hợp lệ. Một câu lệnh bao gồm một phần các từ dành riêng cho SQL, có ý nghĩa đặc biệt trong SQL và không được sử dụng cho bất kỳ mục đích nào khác. Ví dụ: CHỌN và CẬP NHẬT là các từ dành riêng và không thể được sử dụng làm tên bảng

Câu lệnh phải tương đương với một "câu" SQL, như trong

SELECT ename, deptno FROM emp;

Chỉ một câu lệnh SQL mới có thể được thực thi, trong khi một "đoạn câu" chẳng hạn như đoạn sau sẽ tạo ra lỗi cho biết cần có thêm văn bản trước khi câu lệnh SQL có thể thực thi

SELECT ename 

Một câu lệnh SQL có thể được coi là một chương trình hoặc hướng dẫn máy tính rất đơn giản nhưng mạnh mẽ.

Các câu lệnh Oracle SQL được chia thành các loại sau

  • Câu lệnh ngôn ngữ thao tác dữ liệu (DML)
  • Câu lệnh ngôn ngữ định nghĩa dữ liệu (DDL)
  • Báo cáo kiểm soát giao dịch
  • Câu lệnh kiểm soát phiên
  • Báo cáo kiểm soát hệ thống
Mỗi loại câu lệnh SQL được mô tả ngắn gọn bên dưới

Ghi chú. Oracle cũng hỗ trợ việc sử dụng các câu lệnh SQL trong các đơn vị chương trình PL/SQL;

Báo cáo thao tác dữ liệu (DML)

Các câu lệnh DML truy vấn hoặc thao tác dữ liệu trong các đối tượng lược đồ hiện có. Họ cho phép bạn làm như sau
  • Xóa hàng khỏi bảng hoặc dạng xem (DELETE)
  • Xem kế hoạch thực hiện câu lệnh SQL (GIẢI THÍCH KẾ HOẠCH)
  • Thêm hàng dữ liệu mới vào bảng hoặc dạng xem (INSERT)
  • Khóa bảng hoặc dạng xem, tạm thời giới hạn quyền truy cập của người dùng khác vào bảng đó (LOCK TABLE)
  • Truy xuất dữ liệu từ một hoặc nhiều bảng và dạng xem (CHỌN)
  • Thay đổi giá trị cột trong các hàng hiện có của bảng hoặc dạng xem (CẬP NHẬT)
Các câu lệnh DML là các câu lệnh SQL được sử dụng thường xuyên nhất. Một số ví dụ về câu lệnh DML sau.
SELECT ename, mgr, comm + sal FROM emp; 
INSERT INTO emp VALUES 	
	(1234, 'DAVIS', 'SALESMAN', 7698, '14-FEB-1988', 1600, 500, 30); 
DELETE FROM emp WHERE ename IN ('WARD','JONES'); 

Báo cáo kiểm soát giao dịch

Các câu lệnh kiểm soát giao dịch quản lý các thay đổi được thực hiện bởi các câu lệnh DML và nhóm các câu lệnh DML thành các giao dịch. Họ cho phép bạn làm như sau
  • Thực hiện các thay đổi của giao dịch vĩnh viễn (CAM KẾT)
  • Hoàn tác các thay đổi trong một giao dịch, kể từ khi giao dịch bắt đầu hoặc kể từ khi một điểm lưu trữ (ROLLBACK)
  • Đặt một điểm mà bạn có thể quay lại (SAVEPOINT)
  • Thiết lập thuộc tính cho một giao dịch (SET TRANSACTION)

Tuyên bố định nghĩa dữ liệu (DDL)

Các câu lệnh DDL xác định, thay đổi cấu trúc và loại bỏ các đối tượng lược đồ. Các câu lệnh DDL cho phép bạn thực hiện các thao tác sau
  • Tạo, thay đổi và loại bỏ các đối tượng lược đồ và các cấu trúc cơ sở dữ liệu khác, bao gồm chính cơ sở dữ liệu và người dùng cơ sở dữ liệu (CREATE, ALTER, DROP)
  • Thay đổi tên của các đối tượng giản đồ (RENAME)
  • Xóa tất cả dữ liệu trong các đối tượng lược đồ mà không xóa cấu trúc của đối tượng (TRUNCATE)
  • Thu thập số liệu thống kê về các đối tượng lược đồ, xác thực cấu trúc đối tượng và liệt kê các hàng được xâu chuỗi trong các đối tượng (PHÂN TÍCH)
  • Cấp và thu hồi đặc quyền và vai trò (GRANT, REVOKE)
  • Bật và tắt tùy chọn kiểm tra (AUDIT, NOAUDIT)
  • Thêm nhận xét vào từ điển dữ liệu (COMMENT)
Các câu lệnh DDL hoàn toàn cam kết trước đó và bắt đầu một giao dịch mới. Một số ví dụ về câu lệnh DDL sau.
CREATE TABLE plants 
	(COMMON_NAME VARCHAR2 (15), LATIN_NAME VARCHAR2 (40)); 
DROP TABLE plants; 
GRANT SELECT ON emp TO scott; 
REVOKE DELETE ON emp FROM scott; 

Để biết thông tin cụ thể về các câu lệnh DDL tương ứng với cơ sở dữ liệu và quyền truy cập dữ liệu, hãy xem Chương 17, "Truy cập Cơ sở dữ liệu", Chương "Đặc quyền và Vai trò" và Chương "Kiểm tra"

Báo cáo kiểm soát phiên

Các lệnh điều khiển phiên quản lý các thuộc tính của phiên của một người dùng cụ thể. Ví dụ, họ cho phép bạn làm như sau
  • Thay đổi phiên hiện tại bằng cách thực hiện một chức năng chuyên biệt, chẳng hạn như bật và tắt tiện ích theo dõi SQL (ALTER SESSION)
  • Bật và tắt vai trò (nhóm quyền) cho phiên hiện tại (SET ROLE)

Tuyên bố kiểm soát hệ thống

Các lệnh điều khiển hệ thống thay đổi các thuộc tính của Oracle Server instance. Lệnh điều khiển hệ thống duy nhất là ALTER SYSTEM. Nó cho phép bạn thay đổi các cài đặt như số lượng máy chủ được chia sẻ tối thiểu, hủy phiên và thực hiện các tác vụ khác

Câu lệnh SQL nhúng

Các câu lệnh SQL nhúng kết hợp DDL, DML và các câu lệnh kiểm soát giao dịch trong một chương trình ngôn ngữ thủ tục. Chúng được sử dụng với Oracle Precompilers. Các câu lệnh SQL nhúng cho phép bạn thực hiện các thao tác sau
  • Xác định, phân bổ và giải phóng con trỏ (DECLARE CURSOR, OPEN, CLOSE)
  • Khai báo tên cơ sở dữ liệu và kết nối với Oracle (DECLARE DATABASE, CONNECT)
  • Gán tên biến, khởi tạo bộ mô tả và chỉ định cách xử lý các điều kiện cảnh báo và lỗi (KHAI BÁO TUYÊN BỐ, MÔ TẢ, BẤT CỨ KHI NÀO)
  • Phân tích cú pháp và thực thi các câu lệnh SQL, đồng thời truy xuất dữ liệu từ cơ sở dữ liệu (PREPARE, EXECUTE, EXECUTE IMMEDIATE, FETCH)

Xác định SQL không chuẩn

Oracle cung cấp các tính năng ngoài SQL tiêu chuẩn "Ngôn ngữ cơ sở dữ liệu với tính toàn vẹn nâng cao". Tiêu chuẩn xử lý thông tin liên bang cho SQL (FIPS 127-2) yêu cầu một phương pháp xác định các câu lệnh SQL sử dụng các phần mở rộng do nhà cung cấp cung cấp. Bạn có thể xác định hoặc "gắn cờ" các tiện ích mở rộng của Oracle trong SQL tương tác, Bộ biên dịch trước Oracle hoặc Mô-đun SQL*bằng cách sử dụng trình gắn cờ FIPS

Nếu bạn quan tâm đến tính di động của các ứng dụng của mình đối với các triển khai SQL khác, hãy sử dụng trình gắn cờ FIPS. Để biết thông tin về cách sử dụng trình gắn cờ FIPS, hãy xem , hoặc

SQL đệ quy

Khi một câu lệnh DDL được đưa ra, Oracle ngầm đưa ra các câu lệnh SQL đệ quy để sửa đổi thông tin từ điển dữ liệu. Người dùng không cần quan tâm đến SQL đệ quy do Oracle thực hiện bên trong

con trỏ

Con trỏ là một núm điều khiển hoặc tên cho một vùng trong bộ nhớ trong đó lưu giữ câu lệnh được phân tích cú pháp và thông tin khác để xử lý câu lệnh; . Mặc dù hầu hết người dùng Oracle dựa vào việc xử lý con trỏ tự động của các tiện ích Oracle, giao diện lập trình cung cấp cho các nhà thiết kế ứng dụng nhiều quyền kiểm soát hơn đối với con trỏ. Trong quá trình phát triển ứng dụng, con trỏ là một tài nguyên được đặt tên có sẵn cho một chương trình và có thể được sử dụng cụ thể để phân tích cú pháp các câu lệnh SQL được nhúng trong ứng dụng

SQL dùng chung

Oracle tự động thông báo khi các ứng dụng gửi các câu lệnh SQL giống hệt nhau tới cơ sở dữ liệu. Nếu hai câu lệnh giống hệt nhau được đưa ra, vùng SQL được sử dụng để xử lý phiên bản đầu tiên của câu lệnh sẽ được chia sẻ hoặc được sử dụng để xử lý các phiên bản tiếp theo của cùng một câu lệnh đó

Do đó, thay vì có nhiều vùng SQL dùng chung cho các câu lệnh SQL giống hệt nhau, chỉ tồn tại một vùng SQL dùng chung cho một câu lệnh duy nhất. Vì các vùng SQL được chia sẻ là các vùng bộ nhớ được chia sẻ, bất kỳ quy trình Oracle nào cũng có thể sử dụng vùng SQL được chia sẻ. Việc chia sẻ các vùng SQL làm giảm mức sử dụng bộ nhớ trên máy chủ cơ sở dữ liệu, do đó làm tăng thông lượng hệ thống

Khi đánh giá xem các câu lệnh có giống nhau hay không, Oracle xem xét các câu lệnh SQL được đưa ra trực tiếp bởi người dùng và ứng dụng cũng như các câu lệnh SQL đệ quy được đưa ra bởi một câu lệnh DDL nội bộ

Để biết thêm thông tin về SQL được chia sẻ, hãy xem phần

Phân tích cú pháp là gì?

Phân tích cú pháp là một bước trong quá trình xử lý câu lệnh SQL. Khi một ứng dụng đưa ra câu lệnh SQL, ứng dụng sẽ thực hiện cuộc gọi phân tích tới Oracle. Trong cuộc gọi phân tích cú pháp, Oracle thực hiện các tác vụ này
  • kiểm tra câu lệnh về tính hợp lệ về cú pháp và ngữ nghĩa
  • xác định xem quá trình ban hành câu lệnh có đặc quyền để thực thi nó hay không
  • phân bổ một vùng SQL riêng cho câu lệnh
Oracle cũng xác định xem có khu vực SQL dùng chung hiện có chứa biểu diễn được phân tích cú pháp của câu lệnh trong bộ đệm thư viện hay không. Nếu vậy, quy trình người dùng sử dụng biểu diễn được phân tích cú pháp này và thực thi câu lệnh ngay lập tức. Nếu không, Oracle sẽ phân tích cú pháp câu lệnh, thực hiện các tác vụ này
  • Oracle tạo biểu diễn được phân tích cú pháp của câu lệnh
  • Quá trình người dùng phân bổ một vùng SQL được chia sẻ cho câu lệnh trong bộ đệm thư viện và lưu trữ biểu diễn được phân tích cú pháp của nó ở đó
Lưu ý sự khác biệt giữa một ứng dụng thực hiện cuộc gọi phân tích cú pháp cho câu lệnh SQL và Oracle thực sự phân tích cú pháp câu lệnh
  • Cuộc gọi phân tích cú pháp của ứng dụng liên kết câu lệnh SQL với vùng SQL riêng tư. Khi một câu lệnh đã được liên kết với một vùng SQL riêng tư, nó có thể được thực thi lặp đi lặp lại mà không cần ứng dụng của bạn thực hiện lệnh gọi phân tích cú pháp
  • Thao tác phân tích cú pháp của Oracle phân bổ vùng SQL dùng chung cho câu lệnh SQL. Khi một vùng SQL dùng chung đã được phân bổ cho một câu lệnh, nó có thể được thực thi lặp đi lặp lại mà không bị phân tích lại
Vì cả lệnh gọi và phân tích cú pháp đều có thể tốn kém so với việc thực thi, nên nên thực hiện chúng càng ít càng tốt

Thảo luận này cũng áp dụng cho việc phân tích các khối PL/SQL và phân bổ các vùng PL/SQL. (Xem mô tả về PL/SQL trong phần tiếp theo. ) Các thủ tục, hàm, gói và trình kích hoạt được lưu trữ được chỉ định các vùng PL/SQL. Oracle cũng gán cho mỗi câu lệnh SQL trong khối PL/SQL một vùng SQL dùng chung và riêng


PL/SQL là phần mở rộng ngôn ngữ thủ tục của Oracle cho SQL. PL/SQL cho phép bạn kết hợp các câu lệnh SQL với các cấu trúc thủ tục. PL/SQL cung cấp khả năng định nghĩa và thực thi các đơn vị chương trình PL/SQL như thủ tục, hàm và gói. Các đơn vị chương trình PL/SQL thường được phân loại thành các khối ẩn danh và các thủ tục được lưu trữ

Khối ẩn danh là khối PL/SQL xuất hiện trong ứng dụng của bạn và nó không được đặt tên hoặc lưu trữ trong cơ sở dữ liệu. Trong nhiều ứng dụng, các khối PL/SQL có thể xuất hiện ở bất kỳ đâu mà các câu lệnh SQL có thể xuất hiện

Một thủ tục được lưu trữ là một khối PL/SQL mà Oracle lưu trữ trong cơ sở dữ liệu và có thể được gọi theo tên từ một ứng dụng. Khi bạn tạo một thủ tục được lưu trữ, Oracle sẽ phân tích cú pháp thủ tục và lưu trữ biểu diễn được phân tích cú pháp của nó trong cơ sở dữ liệu. Oracle cũng cho phép bạn tạo và lưu trữ các chức năng, tương tự như các thủ tục và các gói, là các nhóm thủ tục và chức năng. Để biết thông tin về các thủ tục, chức năng, gói và trình kích hoạt cơ sở dữ liệu được lưu trữ, hãy xem Chương 14, "Thủ tục và gói" và Chương "Trigger cơ sở dữ liệu"

PL/SQL thực thi như thế nào

Công cụ PL/SQL là một thành phần đặc biệt của nhiều sản phẩm Oracle, bao gồm Máy chủ Oracle, xử lý PL/SQL. Hình 11 - 1 minh họa công cụ PL/SQL có trong Oracle Server

MySQL có hỗ trợ ngôn ngữ thủ tục không?

Hình 11 - 1. Công cụ PL/SQL và Máy chủ Oracle

Thủ tục (hoặc gói) được lưu trữ trong cơ sở dữ liệu. Khi một ứng dụng gọi một thủ tục được lưu trữ trong cơ sở dữ liệu, Oracle sẽ tải thủ tục đã biên dịch (hoặc gói) vào nhóm dùng chung trong Khu vực Toàn cầu Hệ thống (SGA), và các bộ thực thi câu lệnh PL/SQL và SQL sẽ làm việc cùng nhau để xử lý các câu lệnh trong cơ sở dữ liệu.

Các sản phẩm Oracle sau đây chứa một công cụ PL/SQL

  • SQL*Menu (Phiên bản 5 trở lên)
  • Báo cáo Oracle (Phiên bản 2 trở lên)
  • Đồ họa Oracle (Phiên bản 2 trở lên)
Bạn có thể gọi một thủ tục được lưu trữ từ một khối PL/SQL khác, có thể là một khối ẩn danh hoặc một thủ tục được lưu trữ khác. Ví dụ: bạn có thể gọi một thủ tục được lưu trữ từ Biểu mẫu Oracle (Phiên bản 3 trở lên)

Ngoài ra, bạn có thể chuyển các khối ẩn danh tới Oracle từ các ứng dụng được phát triển bằng các công cụ này

  • Trình biên dịch trước của Oracle (bao gồm cả lần thoát của người dùng)
  • Giao diện cuộc gọi Oracle (OCI)

Cấu trúc ngôn ngữ cho PL/SQL

Các khối PL/SQL có thể bao gồm các cấu trúc ngôn ngữ PL/SQL sau. Các phần sau đây đưa ra mô tả chung về từng cấu trúc;

Biến và hằng Biến và hằng có thể được khai báo trong một thủ tục, hàm hoặc gói. Một biến hoặc hằng số có thể được sử dụng trong câu lệnh SQL hoặc PL/SQL để nắm bắt hoặc cung cấp một giá trị khi cần

Ghi chú. Một số công cụ tương tác, chẳng hạn như Trình quản lý máy chủ, cho phép bạn xác định các biến trong phiên hiện tại của mình. Các biến được khai báo như vậy có thể được sử dụng tương tự như các biến được khai báo trong các thủ tục hoặc gói

Con trỏ Con trỏ có thể được khai báo rõ ràng trong một thủ tục, chức năng hoặc gói để tạo điều kiện xử lý dữ liệu Oracle theo định hướng bản ghi. Con trỏ cũng có thể được khai báo ngầm định (để hỗ trợ các hành động thao tác dữ liệu khác) bởi công cụ PL/SQL

Ngoại lệ PL/SQL cho phép bạn xử lý rõ ràng các điều kiện lỗi nội bộ và do người dùng xác định, được gọi là ngoại lệ, phát sinh trong quá trình xử lý mã PL/SQL. Các ngoại lệ nội bộ do các hoạt động bất hợp pháp gây ra, chẳng hạn như chia cho 0 hoặc lỗi Oracle được trả về mã PL/SQL. Các ngoại lệ do người dùng xác định được xác định và báo hiệu rõ ràng trong khối PL/SQL để kiểm soát việc xử lý các lỗi dành riêng cho ứng dụng (ví dụ: ghi nợ tài khoản và để lại số dư âm)

Khi một ngoại lệ được đưa ra (được báo hiệu), quá trình thực thi bình thường của mã PL/SQL sẽ dừng lại và một quy trình được gọi là trình xử lý ngoại lệ được gọi. Trình xử lý ngoại lệ cụ thể có thể được viết để xử lý bất kỳ ngoại lệ nội bộ hoặc do người dùng xác định

Mặc dù nhiều sản phẩm của Oracle có các thành phần PL/SQL, nhưng chương này đề cập cụ thể đến các quy trình và gói có thể được lưu trữ trong cơ sở dữ liệu Oracle và được xử lý bằng cách sử dụng công cụ PL/SQL của Máy chủ Oracle. Các khả năng PL/SQL của từng công cụ Oracle được mô tả trong hướng dẫn sử dụng công cụ thích hợp

Oracle cũng cho phép bạn tạo và gọi thủ tục lưu sẵn. Nếu ứng dụng của bạn gọi một thủ tục được lưu trữ, biểu diễn được phân tích cú pháp của thủ tục được lấy từ cơ sở dữ liệu và được xử lý bởi công cụ PL/SQL trong Oracle. Bạn có thể gọi các thủ tục được lưu trữ từ các ứng dụng được phát triển bằng các công cụ này

  • Trình biên dịch trước của Oracle (bao gồm cả lần thoát của người dùng)
  • Giao diện cuộc gọi Oracle (OCI)
Bạn cũng có thể gọi một thủ tục được lưu trữ từ một khối PL/SQL khác, một khối ẩn danh hoặc một thủ tục được lưu trữ khác. Để biết thông tin về cách gọi các thủ tục được lưu trữ từ từng loại ứng dụng, hãy xem hướng dẫn sử dụng cho công cụ ứng dụng cụ thể, chẳng hạn như

SQL động trong PL/SQL

Bạn có thể viết các thủ tục được lưu trữ và các khối PL/SQL ẩn danh bằng cách sử dụng SQL động. Các câu lệnh SQL động không được nhúng trong chương trình nguồn của bạn;

Điều này cho phép bạn tạo các thủ tục có mục đích chung hơn. Ví dụ: sử dụng SQL động cho phép bạn tạo một thủ tục hoạt động trên một bảng có tên không được biết cho đến khi chạy

Ngoài ra, bạn có thể phân tích bất kỳ câu lệnh ngôn ngữ thao tác dữ liệu (DML) hoặc ngôn ngữ định nghĩa dữ liệu (DDL) nào bằng cách sử dụng gói DBMS_SQL. Điều này giúp giải quyết vấn đề không thể phân tích trực tiếp các câu lệnh ngôn ngữ định nghĩa dữ liệu bằng PL/SQL. Ví dụ: bây giờ bạn có thể chọn đưa ra câu lệnh DROP TABLE từ bên trong một thủ tục được lưu trữ bằng cách sử dụng thủ tục PARSE được cung cấp cùng với gói DBMS_SQL

MySQL có ngôn ngữ thủ tục không?

Ngôn ngữ thủ tục mới của MySQL có cú pháp đơn giản, giúp bạn dễ dàng viết các chương trình đơn giản. Nhưng không dễ để viết các chương trình an toàn, dễ bảo trì, hiệu năng cao và không có lỗi.

Chúng ta có thể viết thủ tục trong MySQL không?

Các thủ tục được lưu trữ có thể trả về nhiều bộ kết quả. Bạn có thể tạo một thủ tục bằng cách sử dụng câu lệnh MySQL CREATE PROCEDURE .

SQL có phải là ngôn ngữ thủ tục không?

SQL là ngôn ngữ phi thủ tục ; .

MySQL hỗ trợ ngôn ngữ nào?

Ngôn ngữ lập trình. Có khá nhiều API (giao diện lập trình ứng dụng) và thư viện để phát triển ứng dụng MySQL. Đối với lập trình máy khách, bạn có thể sử dụng, trong số những ngôn ngữ khác, C, C++, Java, Perl, PHP, Python và Tcl . ODBC. MySQL hỗ trợ giao diện ODBC Trình kết nối/ODBC.