13.7.5.27 Отображение кода процедуры SHOW PROCEDURE CODE
SHOW PROCEDURE CODE proc_name
Данное утверждение является расширением MySQL, доступным только для серверов, собранных с поддержкой отладки. Оно отображает представление внутренней реализации именованной хранимой процедуры. Аналогичное утверждение, SHOW
FUNCTION CODE, отображает информацию о хранимых функциях (см. Раздел 13.7.5.19, «Утверждение SHOW FUNCTION CODE»).
Для использования любого из утверждений, необходимо быть владельцем процедуры или иметь SELECT доступ к таблице mysql.proc.
Если именованная процедура доступна, каждое утверждение генерирует результат. Каждая строка в наборе результатов соответствует одной “инструкции” в процедуре. Первый столбец — 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_namestmt, за которым следует тип (9 означает DROP, 5 означает INSERT и так далее). Последняя строка содержит инструкцию jump 2, означающую GOTO instruction #2.
© 2025 Oracle
Licensed under the GPLv2 License.