MySQL存储过程相互调用并获得错误码示例

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技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获。 其实就是告诉MySQL解释器,该段命令是否已经结束了,MySQL数据库是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,…

    MySQL 2023年4月13日
    00
  • Linux安装&卸载mysql5.7

    Linux系统下卸载mysql 停止mysql服务 systemctl stop mysqld.service 查看安装的mysql服务 rpm -qa|grep -i mysql 删除安装的mysql服务 rpm -e –nodeps mysql相关服务 #例如: rpm -e –nodeps mysql-community-client-5.7.26…

    MySQL 2023年4月12日
    00
  • Mysql IN语句查询

    语法: WHERE column IN (value1,value2,…) WHERE column NOT IN (value1,value2,…) 1、in 后面是记录集,如: select * from table where uname in(select uname from user); 例子: SELECT * FROM article…

    MySQL 2023年4月13日
    00
  • MySQL之数据表的插入内容 空与非空(六)

    NULL与NOT NULL mysql> CREATE TABLE tb2( -> usename VARCHAR(20) NOT NULL, -> age TINYINT UNSIGNED NULL(可以为空) -> );Query OK, 0 rows affected (0.06 sec) mysql> SHOW COLU…

    MySQL 2023年4月16日
    00
  • MySQL索引介绍及优化方式

    MySQL索引介绍及优化方式 什么是索引 索引是一种数据结构,用于提高数据库查询效率。在数据库中,当有大量的数据需要查询时,如果没有设置索引,那么查询速度会非常缓慢。 MySQL 索引的类型 MySQL 中有很多种类型的索引。常见的索引类型包括: 主键索引 主键索引是一种唯一性索引,用于标识一条记录。每张表最多只能有一个主键索引。 普通索引 普通索引也叫单列…

    MySQL 2023年5月19日
    00
  • MYSQL中常用的强制性操作(例如强制索引)

    MySQL中常用的强制性操作有以下四个: 强制使用索引(FORCE INDEX) 强制选择操作指定索引(USE INDEX) 禁止选择操作使用指定索引(IGNORE INDEX) 强制重新分析表(ANALYZE TABLE) 下面分别详细讲解这些强制性操作的使用方法: 1. 强制使用索引(FORCE INDEX) 有时候MySQL会不按照我们期望的方式使用索…

    MySQL 2023年5月19日
    00
  • MySQL性能瓶颈排查定位实例详解

    MySQL性能瓶颈排查定位实例详解 前言 MySQL是一款常用的数据库管理系统,如何提升MySQL的性能,是运维工程师面临的重要问题之一。在实际开发及运维工作中,经常遇到MySQL性能瓶颈的问题。解决MySQL性能瓶颈,首先需要了解瓶颈的产生原因。本文将详细讲解MySQL性能瓶颈排查定位实例,并提供两条示例。 一、MySQL性能瓶颈的排查定位实例 1.1 慢…

    MySQL 2023年5月19日
    00
  • MySql 错误Incorrect string value for column

    当使用MySQL进行字符串插入时,可能会出现错误“Incorrect string value for column”。这种错误主要是出现在当插入的字符串值中包含一些不受欢迎的字符,而MySQL表示不支持这些字符时会出现。 为了解决这个问题,需要以下步骤: 1. 确认MySQL字符集设置 这个错误通常是由于MySQL字符集不支持插入的字符串值中的某些字符。所…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部