Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  SHOW PROCEDURE CODE Statement

15.7.7.28 显示存储过程代码语句

SHOW PROCEDURE CODE proc_name

这是 MySQL 扩展语句,仅在支持调试的服务器上可用。它显示了指定存储过程的内部实现表示。类似语句是SHOW FUNCTION CODE,显示关于存储函数的信息(请参见第15.7.7.20节,“SHOW FUNCTION CODE 语句”)。

要使用这两个语句,您必须是该存储程序的所有者,或者拥有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语句已经消失,对于DECLARE variable_name语句,只显示可执行部分(分配默认值的部分)。对于每个来自源代码的语句,后面跟着一个代码单词stmt,然后是一个类型(9表示DROP,5表示INSERT,等等)。最后一行包含一个指令jump 2,表示GOTO指令#2。