#### 13.7.7.27 SHOW PROCEDURE CODE Statement

[]()

```
SHOW PROCEDURE CODE proc_name
```

 This statement is a MySQL extension that is available only for servers that have been built with debugging support. It displays a representation of the internal implementation of the named stored procedure. A similar statement, [`SHOW FUNCTION CODE`](show-function-code.html), displays information about stored functions (see [Section 13.7.7.19, “SHOW FUNCTION CODE Statement”](show-function-code.html)).

 To use either statement, you must be the user named as the routine `DEFINER`, have the [`SHOW_ROUTINE`](privileges-provided.html#priv_show-routine) privilege, or have the [`SELECT`](privileges-provided.html#priv_select) privilege at the global level.

 If the named routine is available, each statement produces a result set. Each row in the result set corresponds to one “instruction” in the routine. The first column is `Pos`, which is an ordinal number beginning with 0. The second column is `Instruction`, which contains an SQL statement (usually changed from the original source), or a directive which has meaning only to the stored-routine handler.

```
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)
```

 In this example, the nonexecutable `BEGIN` and `END` statements have disappeared, and for the `DECLARE *`variable_name`*` statement, only the executable part appears (the part where the default is assigned). For each statement that is taken from source, there is a code word `stmt` followed by a type (9 means `DROP`, 5 means [`INSERT`](insert.html), and so on). The final row contains an instruction `jump 2`, meaning `GOTO instruction #2`.

