Khi sử dụng trình soạn thảo thủ tục dựng sẵn, MySQL Workbench thêm một số lệnh bổ sung:
USE `test`; // <----------
DROP procedure IF EXISTS `p2`; // <----------
DELIMITER $$
USE `test`$$ // <----------
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$
DELIMITER ; // <----------
Các lệnh đó không liên quan chặt chẽ đến cú pháp thủ tục được lưu trữ, chúng chỉ đơn thuần là hàng hóa — các ứng dụng khách MySQL khác (chẳng hạn như HeidiSQL hoặc tiện ích dòng lệnh chính thức) sẽ không thêm chúng. Thay đổi dấu phân cách cuối cùng có thể là đặt lại để tránh sự cố trong các câu lệnh trong tương lai trên cùng một kết nối.
Bạn cần thay đổi dấu phân cách để hướng dẫn khách hàng về nơi mã thủ tục bắt đầu và kết thúc. Vấn đề là thân thủ tục thường là một tập hợp các câu lệnh SQL nên việc bỏ qua thay đổi dấu phân cách sẽ khiến MySQL nghĩ rằng bạn đang cố chạy một loạt câu lệnh, câu lệnh đầu tiên sẽ là:
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
Với DELIMITER $$
bạn đang nói với MySQL rằng câu lệnh đầy đủ của bạn đến từ CREATE
đến END
. Nó chỉ là đường cú pháp:DELIMITER
thậm chí không phải là một từ khóa SQL. Ví dụ:HeidiSQL cung cấp GUI với hộp văn bản nơi bạn viết phần nội dung thủ tục, do đó bạn không cần giải pháp DELIMITER.