Làm cách nào để tăng lỗi trong trình kích hoạt MySQL?

Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5  và

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
6 để đưa ra các điều kiện lỗi bên trong các thủ tục được lưu trữ

Câu lệnh TÍN HIỆU MySQL

Bạn sử dụng câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5 để trả về một lỗi hoặc tình trạng cảnh báo cho người gọi từ một chương trình được lưu trữ e. g. , thủ tục được lưu trữ, chức năng được lưu trữ, trình kích hoạt hoặc sự kiện. Câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5 cung cấp cho bạn quyền kiểm soát thông tin nào sẽ được trả về, chẳng hạn như giá trị và thông báo

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
9

Sau đây minh họa cú pháp của câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5

SIGNAL SQLSTATE | condition_name; SET condition_information_item_name_1 = value_1, condition_information_item_name_1 = value_2, etc;

Code language: SQL (Structured Query Language) (sql)

Theo sau từ khóa

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5 là một giá trị 

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
9 hoặc tên điều kiện được khai báo bởi câu lệnh 

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
3. Lưu ý rằng câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5 phải luôn chỉ định giá trị 

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
9 hoặc điều kiện được đặt tên được xác định bằng giá trị 

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
9

Để cung cấp thông tin cho người gọi, bạn sử dụng mệnh đề

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
7. Nếu bạn muốn trả về nhiều tên mục thông tin điều kiện với các giá trị, bạn cần phân tách từng cặp tên/giá trị bằng dấu phẩy

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
8 có thể là

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
9,

CALL AddOrderItem(10,'S10_1678',1,95.7,1);

Code language: JavaScript (javascript)
0,

CALL AddOrderItem(10,'S10_1678',1,95.7,1);

Code language: JavaScript (javascript)
1, v.v.

Quy trình được lưu trữ sau đây thêm một mục hàng đặt hàng vào một đơn đặt hàng hiện có. Nó đưa ra thông báo lỗi nếu số thứ tự không tồn tại

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)

Đầu tiên, nó đếm các đơn đặt hàng với số thứ tự đầu vào mà chúng tôi chuyển đến thủ tục được lưu trữ

Thứ hai, nếu số đơn đặt hàng không phải là 1, nó sẽ phát sinh lỗi với 

CALL AddOrderItem(10,'S10_1678',1,95.7,1);

Code language: JavaScript (javascript)
2 cùng với thông báo lỗi cho biết số đơn đặt hàng đó không tồn tại trong bảng đơn đặt hàng

Lưu ý rằng

CALL AddOrderItem(10,'S10_1678',1,95.7,1);

Code language: JavaScript (javascript)
3 là một giá trị chung của

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
9 minh họa một ngoại lệ do người dùng xác định chưa được xử lý

Nếu chúng ta gọi thủ tục được lưu trữ 

CALL AddOrderItem(10,'S10_1678',1,95.7,1);

Code language: JavaScript (javascript)
5 và chuyển một số thứ tự không tồn tại, chúng ta sẽ nhận được thông báo lỗi

CALL AddOrderItem(10,'S10_1678',1,95.7,1);

Code language: JavaScript (javascript)
Làm cách nào để tăng lỗi trong trình kích hoạt MySQL?
Làm cách nào để tăng lỗi trong trình kích hoạt MySQL?

Câu lệnh RESIGNAL của MySQL

Bên cạnh câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5  , MySQL cũng cung cấp câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
6  được sử dụng để đưa ra cảnh báo hoặc tình trạng lỗi

Câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
6 tương tự như câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5 về chức năng và cú pháp, ngoại trừ việc

  • Bạn phải sử dụng câu lệnh

    DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

    Code language: SQL (Structured Query Language) (sql)
    6 trong một trình xử lý lỗi hoặc cảnh báo, nếu không, bạn sẽ nhận được thông báo lỗi nói rằng "GIẢI HIỆU LỰC khi trình xử lý không hoạt động". Lưu ý rằng bạn có thể sử dụng câu lệnh

    DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

    Code language: SQL (Structured Query Language) (sql)
    5 ở bất kỳ đâu trong một thủ tục được lưu trữ
  • Bạn có thể bỏ qua tất cả các thuộc tính của câu lệnh

    DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

    Code language: SQL (Structured Query Language) (sql)
    6, thậm chí cả giá trị

    DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

    Code language: SQL (Structured Query Language) (sql)
    9

Nếu bạn chỉ sử dụng câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
6, thì tất cả các thuộc tính đều giống với các thuộc tính được truyền cho trình xử lý điều kiện

Quy trình được lưu trữ sau đây sẽ thay đổi thông báo lỗi trước khi đưa ra cho người gọi

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
2

Hãy gọi thủ tục được lưu trữ 

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
25

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
4
Làm cách nào để tăng lỗi trong trình kích hoạt MySQL?
Làm cách nào để tăng lỗi trong trình kích hoạt MySQL?

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách đưa ra các điều kiện lỗi bên trong các chương trình được lưu trữ bằng cách sử dụng câu lệnh

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
5  và 

DELIMITER $$ CREATE PROCEDURE AddOrderItem( in orderNo int, in productCode varchar(45), in qty int, in price double, in lineNo int ) BEGIN DECLARE C INT; SELECT COUNT(orderNumber) INTO C FROM orders WHERE orderNumber = orderNo; -- check if orderNumber exists IF(C != 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order No not found in orders table'; END IF; -- more code below -- ... END

Code language: SQL (Structured Query Language) (sql)
6.

Làm cách nào để tăng ngoại lệ trong trình kích hoạt MySQL?

Kể từ MySQL 5. 5, bạn có thể sử dụng cú pháp SIGNAL để đưa ra một ngoại lệ . tín hiệu sqlstate '45000' set message_text = 'Thông báo lỗi của tôi'; . Lưu câu trả lời này.

Làm cách nào để in thông báo lỗi trong MySQL?

Chúng tôi có thể in thông báo lỗi bằng cách sử dụng hàm mysql mysql_error() . Hàm này trả về thông báo lỗi liên quan đến truy vấn được thực hiện gần đây nhất. Vì vậy, bạn nên kiểm tra lỗi trước khi chuyển sang truy vấn tiếp theo. Chúng tôi thậm chí có thể thêm số lỗi do mysql trả về vào thông báo lỗi này.

Làm cách nào để khai báo ngoại lệ trong MySQL?

Có thể có các dạng sau. .
mysql_error_code. Một số nguyên cho biết mã lỗi MySQL, chẳng hạn như 1051 để chỉ định “bảng không xác định”. .
SQLSTATE [GIÁ TRỊ] sqlstate_value. Một chuỗi ký tự gồm 5 ký tự cho biết giá trị SQLSTATE, chẳng hạn như '42S01' để chỉ định “bảng không xác định”

Làm cách nào để thực thi trình kích hoạt trong MySQL?

Trình kích hoạt MySQL là một đối tượng cơ sở dữ liệu được liên kết với một bảng. Nó sẽ được kích hoạt khi một hành động xác định được thực thi cho bảng. Trình kích hoạt có thể được thực thi khi bạn chạy một trong các câu lệnh MySQL sau trên bảng. CHÈN, CẬP NHẬT và XÓA và nó có thể được gọi trước hoặc sau sự kiện.