• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SHOW PROCEDURE CODE语句

    SHOW PROCEDURE CODE proc_name
    

    该语句是MySQL扩展,仅适用于使用调试支持构建的服务器。它显示了命名存储过程的内部实现。类似的语句SHOW FUNCTION CODE显示有关存储函数的信息(请参见“ 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)
    

    在此示例中,不可执行BEGINEND语句已消失,并且对于该语句,仅显示可执行部分(分配了默认值的部分)。对于从源头获取的每个语句,都有一个代码字,其后是一个类型(9表示,5表示等等)。最后一行包含指令,即含义。DECLARE variable_namestmtDROPINSERTjump 2GOTO instruction #2