2012-05-16 24 views
9

Tôi đang sử dụng mysql v5.1.48 và đỏ http://dev.mysql.com/doc/refman/5.5/en/signal.html. Nhưng mãTại sao từ khóa tín hiệu không hoạt động trong mySQL 5.1.48?

DELIMITER $$ 
CREATE PROCEDURE `CoreRaiseError`() 
BEGIN 
    SIGNAL SQLSTATE '45000' 
     SET MESSAGE_TEXT = 'An error occurred', MYSQL_ERRNO = 1001; 
END$$ 

nâng cao một

SQL Lỗi 1064: Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần 'SQLSTATE '45000'

Từ phiên bản SIGNAL bắt đầu trở thành một từ khóa? Làm thế nào tôi có thể nâng cao một ngoại lệ với phiên bản trước của mysql?

Cảm ơn bạn.

Trả lời

11

Như đã nêu trong the manual cho MySQL phiên bản 5.1:

báo cáo khác liên quan đến điều kiện SIGNAL, RESIGNAL, và GET DIAGNOSTICS. Các câu lệnh SIGNALRESIGNAL không được hỗ trợ cho đến khi MySQL 5.5. Câu lệnh GET DIAGNOSTICS không được hỗ trợ cho đến khi MySQL 5.6.

Để phát sinh lỗi trong các phiên bản cũ hơn của MySQL, chỉ cần cố tình đưa ra lệnh sai. Tôi thường CALL một thủ tục không tồn tại, ví dụ:

CALL raise_error; 
+1

Tôi phải thay đổi kích hoạt tốt đẹp để ngăn chặn xóa một số loại bản ghi nhất định. Thử nghiệm nó trong 5.6 và tất cả đều mát mẻ. Sau đó, tôi phát hiện ra việc triển khai đến 5,1 đã bị phá vỡ vì vậy điều này làm việc cho tôi. Những gì tôi đã làm là: 'gọi You_may_not_delete_those_kind_of_records'. lol. Xấu xí .. nhưng hoạt động và giúp bạn dễ dàng tìm thấy trong nhật ký của mình. – cbmeeks

+0

Nó không hoạt động với MySQL 5.5.38. – Hibou57

+0

Đây là câu hỏi bạn có thể thích: [mysql 5.1 báo hiệu lỗi gây ra ngoại lệ PDO] (http://stackoverflow.com/questions/18070473/mysql-5-1-signal-an-error-to-cause-pdo - ngoại lệ). – Ggicci

Các vấn đề liên quan