Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

15.7.7.29 显示过程代码语句

SHOW PROCEDURE CODE proc_name

该语句是 MySQL 的扩展,仅适用于具有调试支持的服务器。它显示了命名存储过程的内部实现表示形式。类似的语句,显示函数代码,显示了存储函数的信息(见 第 15.7.7.20 节,“显示函数代码语句”)。

要使用这两个语句,您必须是命名 routine 的用户,拥有 SHOW_ROUTINE 权限,或者拥有全局级别的 SELECT 权限。

如果命名的 routine 可用,每个语句将生成一个结果集。结果集中的每一行对应于 routine 中的一个“指令”。第一列是 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