MySQL存储过程相互调用并获得错误码需要以下步骤:
步骤一、创建存储过程
在MySQL中创建好要相互调用的存储过程。下面示例中,创建一个名为proc1
的存储过程:
DELIMITER //
CREATE PROCEDURE proc1()
BEGIN
DECLARE exit handler for sqlexception
BEGIN
GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO,
@errmsg = MESSAGE_TEXT;
SELECT CONCAT('ERROR [', @errno, '] : ',
@errmsg) AS `Error Message`;
END;
CALL proc2();
END//
DELIMITER ;
此存储过程使用了异常处理机制,当调用proc2
存储过程出现异常时,将获取错误编号和错误信息,然后输出错误信息。
步骤二、相互调用
在存储过程中调用另一个存储过程,并传递参数。下面示例中,proc1
存储过程中调用proc2
存储过程,并传递参数。
DELIMITER //
CREATE PROCEDURE proc1()
BEGIN
DECLARE exit handler for sqlexception
BEGIN
GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO,
@errmsg = MESSAGE_TEXT;
SELECT CONCAT('ERROR [', @errno, '] : ',
@errmsg) AS `Error Message`;
END;
DECLARE pname VARCHAR(40) DEFAULT 'John';
DECLARE page INT DEFAULT 35;
CALL proc2(pname, page);
END//
DELIMITER ;
步骤三、获取错误信息
当相互调用的存储过程执行时,如果出现异常,可以通过GET DIAGNOSTICS
语句获取错误信息。下面示例中,proc2
存储过程传递的参数类型与第一个示例不同,这里使用的是IN
参数。
DELIMITER //
CREATE PROCEDURE proc2(
IN pName VARCHAR(40),
IN pAge INT
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO,
@errmsg = MESSAGE_TEXT;
SELECT CONCAT('ERROR [', @errno, '] : ',
@errmsg) AS `Error Message`;
END;
IF pAge < 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid age value';
END IF;
INSERT INTO `users`(`name`,`age`)
VALUES (pName, pAge);
END//
DELIMITER ;
在proc2
存储过程中,如果传入的age
小于0,则会抛出自定义的异常,并输出错误信息。这时,如果proc1
存储过程调用了proc2
存储过程,proc1
就会通过GET DIAGNOSTICS
语句获取到错误信息,并输出到控制台上。
综上所述,相互调用MySQL存储过程并获取错误信息,需要在存储过程中使用异常处理机制,在相互调用的存储过程中进行参数传递,使用GET DIAGNOSTICS
语句获取错误信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL存储过程相互调用并获得错误码示例 - Python技术站