Spec-Zone.ru › MySQL 8.4

15.7.7.29 Запрос кода процедуры SHOW

SHOW PROCEDURE CODE proc_name

Этот запрос — расширение MySQL, доступное только для серверов, скомпилированных с поддержкой отладки. Он отображает представление внутренней реализации именованной хранимой процедуры. Аналогичный запрос, SHOW FUNCTION CODE, отображает информацию о хранимых функциях (см. Раздел 15.7.7.20, «Запрос кода функции SHOW»).

Для использования запроса необходимо быть пользователем, указанным как владелец процедуры 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)

В этом примере неисполнимые BEGIN и END запросы исчезли, а для запроса DECLARE variable_name отображается только исполняемая часть (часть, где задаётся значение по умолчанию). Для каждого запроса, взятого из исходного кода, есть код слова stmt, за которым следует тип (9 означает DROP, 5 означает INSERT и так далее). Последняя строка содержит инструкцию jump 2, означающую GOTO instruction #2.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/show-procedure-code.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API