暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的SQL语句 - 数据库管理语句 - SHOW 语句 - SHOW PROCEDURE CODE 语句

数据库杂货铺 2021-04-12
437
SHOW PROCEDURE CODE 语句
 
    SHOW PROCEDURE CODE proc_name
     
    此语句是一个 MySQL 扩展,仅适用于在构建时启用了调试支持的服务器。它显示指定存储过程的内部实现的表示形式。类似的语句 SHOW FUNCTION CODE 显示有关存储函数的信息。
     
    要使用语句,必须是例程 DEFINER 的用户,具有 SHOW_ROUTINE 权限,或者具有全局级别的 SELECT 权限。
     
    如果指定的例程可用,则每条语句都会生成一个结果集。结果集中的每一行对应于例程中的一条“指令”。第一列是 Pos,它是一个从0开始的序数。第二列是 Instruction,它包含一个 SQL 语句(通常是原始代码的变形),或者是一个只对存储例程句柄有意义的指令。
     
      mysql> DELIMITER //
      mysql> CREATE PROCEDURE p1 ()
      BEGIN
      DECLARE fanta INT DEFAULT 55;
      DROP TABLE t2;
      LOOP
      INSERT INTO t3 VALUES (fanta);
      END LOOP;
      END//
      Query OK, 0 rows affected (0.01 sec)


      mysql> SHOW PROCEDURE CODE p1//
      +-----+----------------------------------------+
      | Pos | Instruction |
      +-----+----------------------------------------+
      | 0 | set fanta@0 55 |
      | 1 | stmt 9 "DROP TABLE t2" |
      | 2 | stmt 5 "INSERT INTO t3 VALUES (fanta)" |
      | 3 | jump 2 |
      +-----+----------------------------------------+
      4 rows in set (0.00 sec)


      mysql> CREATE FUNCTION test.hello (s CHAR(20))
      RETURNS CHAR(50) DETERMINISTIC
      RETURN CONCAT('Hello, ',s,'!');
      Query OK, 0 rows affected (0.00 sec)


      mysql> SHOW FUNCTION CODE test.hello;
      +-----+---------------------------------------+
      | Pos | Instruction |
      +-----+---------------------------------------+
      | 0 | freturn 254 concat('Hello, ',s@0,'!') |
      +-----+---------------------------------------+
      1 row in set (0.00 sec)
       
      在本例中,不可执行的 BEGIN END 语句已消失,对于 DECLARE variable_name 语句,只显示可执行部分(指定默认值的部分)。对于从源代码中获取的每个语句,都有一个代码字 stmt 后跟一个类型(9表示 DROP5 表示 INSERT,等等)。最后一行包含指令 jump 2,表示 GOTO 到指令 #2
       
       
      官方文档:
      https://dev.mysql.com/doc/refman/8.0/en/show-procedure-code.html
       

      文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论