2012-01-26 75 views
5

Tôi đang cố gắng thay đổi dấu phân cách lệnh MySQL để tôi có thể tạo một thủ tục với nhiều lệnh trong đó. Tuy nhiên, lệnh delimiter dường như không được nhận ra trên MySQL 5.1.47. Tôi đã thử nghiệm nó trên MySQL 5.0.91, và nó đã làm việc ở đó.Lỗi cú pháp delimiter MySQL

DELIMITER //; 
DELIMITER ;// 

Tôi đang cố gắng chạy điều này từ phpmyadmin, trong cả hai trường hợp. Sử dụng 5.0.91 thay vì không phải là một tùy chọn vì tôi cần sử dụng các sự kiện (CREATE EVENT).

Thông báo lỗi:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //' at line 1 

Có một lý do nó không làm việc, hoặc là có một sự thay thế để thực hiện điều tương tự (tạo một thủ tục với nhiều truy vấn)?

+0

Tôi đã đọc rằng 'DELIMITER' không thực sự là một lệnh MySQL, đó là lệnh của khách hàng. Điều này có nghĩa là PHPMyAdmin cần hỗ trợ nó như trái ngược với MySQL? – Patrickdev

Trả lời

13

DELIMITER không phải là một lệnh MySQL. Đó là một lệnh mà máy khách MySQL của bạn cần hỗ trợ. Tôi đã chạy PHPMyAdmin 2.8.2.4, mà không hỗ trợ nó. Khi tôi nâng cấp lên phiên bản mới nhất, hiện tại là 3.4.9, nó hoạt động tốt. Phiên bản MySQL của bạn không liên quan gì đến DELIMITER và liệu nó có được hỗ trợ hay không.

2

Bạn không cần phải phân định các báo cáo phân định

DELIMITER // 

procedure here etc 

DELIMITER ; 

Đúng như mỗi "Defining Stored Programs" trong các tài liệu MySQL.

Và nếu bạn có thể kiểm soát phiên bản, phiên bản mới nhất là 5.5.20. Tại sao không sử dụng?

Edit:

Các thông báo lỗi chỉ ra một lỗi trong báo cáo kết quả trước đó ... nếu điều này không thể dường như lực lượng nó như vậy

; /* <- force previous statement termination */ DELIMITER // 

procedure here etc 

DELIMITER ; 
+0

Tôi không thể kiểm soát các phiên bản, tôi chỉ tình cờ có nhiều môi trường chạy các phiên bản khác nhau. Ngoài ra, đề xuất bạn đã đăng không hoạt động. Thông báo lỗi tương tự xuất hiện. – Patrickdev

+0

@Patrickdev: lỗi sẽ có trong tuyên bố trước đó của bạn sẽ bị hủy bỏ ... – gbn

+1

Tôi đã thử nghiệm điều này chỉ bằng lệnh này. Không có tuyên bố trước đó. Bên cạnh đó, nếu có một vấn đề cú pháp, nó sẽ không được ném một lỗi trên các phiên bản khác không? – Patrickdev