当前位置: 首页 > article >正文

MySQL——事务与存储过程(三)存储过程的使用(2) 查看存储过程

        MySQL存储了存储过程的状态信息,用户可以使用 SHOW STATUS 语句或 SHOW CREATE 语句来查看,也可以直接从系统的 information_schema 数据库中查询。接下来将针对这三种方法进行详细的讲解。

1.SHOW STATUS 语句查看存储过程的状态

        SHOW STATUS语句可以查看存储过程的状态,其基本语法结构如下:

SHOW [PROCEDURE|FUNCTION] STATUS [LIKE 'pattern']

        这个语句是一个 MySQL 的扩展。它返回子程序的特征,如数据库、名字、类型、创建者及创建、修改日期,如果没有指定样式,根据使用的语句,所有存储程序或存储函数的信息都被列出。上述语法格式中,PROCEDURE 和 FUNCTION 分别表示查看存储过的和函数,LIKE语句表示匹配的名称。
        例如, SHOW STATUS 语句的示例代码如下:

SHOW PROCEDURE STATUS LIKE'C%'\G

        代码执行如下:

mysql> SHOW PROCEDURE STATUS LIKE'C%'\G
*************************** 1. row ***************************
                  Db: chapter06
                Name: CountProc1
                Type: PROCEDURE
             Definer: 0
            Modified: 2024-07-27 08:50:35
             Created: 2024-07-27 08:50:35
       Security_type: DEFINER
             Comment:
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

        上述代码中“SHOW PROCEDURE STATUS LIKE'C%'\G”语句获取数据库中所有名称以C开头的存储过程的信息。通过上面的语句可以看到,这个存储过程所在的数据库为 chapter06,存储过程的名称为 CountProc1 等相关信息。

2.SHOW CREATE 语句查看存储过程的状态

        除了 SHOW STATUS语句外,MySQL 还可以使用 SHOW CREATE 语句查看存储过程的状态,基本语法格式如下:

SHOW CREATE{PROCEDURE|FUNCTION} sp_name

        这个语句也是一个 MySQL的扩展。类似于 SHOW CREATE TABLE,它返回一个可用来重新创建已命名子程序的确切字符串。
        例如,SHOW CREATE 语句的示例代码如下:

SHOW CREATE PROCEDURE chapter06.CountProc1\G

        代码执行如下:

mysql> SHOW CREATE PROCEDuRE chapter06.CountProc1\G
*************************** 1. row ***************************
                Procedure: CountProcl
                 sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_
                           SUBSTITUTION
      Create Procedure: CREATE DEFINER="@" PROCEDURE 'CountProcl'(IN s_gender VARCHAR(50),OUT num INT)
BEGIN
SELECT COUNT(*) INTO num FROM student WHERE gender =s_gender;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

3.从 information_schema.Routines 表中查看存储过程的信息

        在 MySQL 中存储过程和函数的信息存储在 information_schema 数据库下的 Routines 表中。可以通过查询该表的记录来查询存储过程的信息,查询语句如下:

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='CountProc1' AND ROUTINE_TYPE='PROCEDURE'\G

        SQL语句执行结果如下:

mysql> SELECT * FROM information_schema.Routines
    -> WHERE ROUTINE_NAME='CountProc1' AND ROUTINE_TYPE='PROCEDURE'\G
*************************** 1. row ***************************
                SPECIFIC_NAME: CountProc1
              ROUTINE_CATALOG: def
               ROUTINE_SCHEMA: chapter06
                 ROUTINE_NAME: CountProcl
                 ROUTINE_TYPE: PROCEDURE
                    DATA_TYPE:
     CHARACTER_MAXIMUM_LENGTH: NULL
       CHARACTER_OCTET_LENGTH: NULL
            NUMERIC_PRECISION: NULL
                NUMERIC_SCALE: NULL
           DATETIME_PRECISION: NULL
           CHARACTER_SET_NAME: NULL
               COLLATION_NAME: NULL
               DTD_IDENTIFIER: NULL
                 ROUTINE_BODY: SQL
            ROUTINE_DEFINTION:BEGIN
SELECT COUNT(*)INTO num FROM student WHERE gender =s_gender;
END
                EXTERNAL_NAME: NULL
            EXTERNAL_LANGUAGE: NULL
              PARAMETER_STYLE: SQL
             IS_DETERMINISTIC: NO
       SQL_DATA_ACCESS: CONTAINS SQL
                     SQL_PATH: NULL
                SECURITY_TYPE: DEFINER
                      CREATED:2024-07-27 08:50:35
                 LAST_ALTERED:2024-07-27 08:50:35
       SQL MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE USER,NO_ENGINE SUBSTITUTION
             ROUTINE_COMMENT :
                      DEFINER: @
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

        需要注意的是,在 information_schema 数据库下的 Routines 表中,存储所有存储过程的定义。使用 SELECT 语句查询 Routine 表中的存储过程的定义时,一定要使用ROUTINE_NAME 字段指定存储过程的名称,否则将查询出所有存储过程的定义。如果有存储过程和函数名称相同,则需要同时指定 ROUTINE_TYPE 字段表明査询的是哪种类型的存储程序。


http://www.kler.cn/a/291780.html

相关文章:

  • 使用 datamodel-code-generator 从 MySQL 生成 Python 模型
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版
  • web3跨链桥协议-Nomad
  • Linux应用软件编程-文件操作(标准io)
  • 浅谈怎样系统的准备前端面试
  • Android代码结构图
  • vs2022 的wpf应用,需要生成的WpfApp1\bin\Debug\WpfApp1.exe添加图
  • 等保测评中的访问控制与用户认证
  • WS2812B驱动
  • CAS
  • 面试总结1
  • 前端模拟面试:如何检查JavaScript对象属性是否存在?
  • 分类预测|基于雪消融优化极端梯度提升的数据分类预测Matlab程序SAO-XGBoost 多特征输入多类别输出
  • 安防监控视频打手机检测算法核心技术打手机检测算法源码、模型简介
  • 阿里云对象存储服务(Aliyun OSS):企业级云存储解决方案
  • 毒枸杞事件启示录:EasyCVR视频AI智能监管方案如何重塑食品卫生安全防线
  • matter消息中的组播和广播
  • 鼠标控制dom元素的大小。采用ResizeObserver——监听元素大小的变化
  • uni-app全局引入js文件
  • .Net 6.0--通用帮助类--FileHelper
  • 打卡57天------图论(两种算法)
  • Leetcode刷题笔记:多数元素(摩尔投票算法最通俗的理解)
  • 设计模式学习-责任链模式
  • 结构型设计模式--装饰模式
  • 【Spring Boot-Spring Boot配置文件分类】
  • 前端面试题总结(HTML篇和CSS篇)