Привет, я борюсь с проблемой, когда мне нужно просмотреть содержимое хранимой процедуры, для чего у меня есть команда, чтобы получить имя процедуры
mysql> SHOW PROCEDURE STATUS;
+-----+---------------------------------+-----------+-----------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----+---------------------------------+-----------+-----------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| vmp | ccontrol_table | PROCEDURE | user1@% | 2015-11-10 01:01:51 | 2015-11-10 01:01:51 | DEFINER | | utf8 | utf8_general_ci | latin1_swedish_ci |
+-----+---------------------------------+-----------+-----------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.27 sec)
Он показывает мне, что процедура существует с именем control_table. Чтобы просмотреть процедуру, я использовал SHOW CREATE PROCEDURE control_table, которую он отображает в этом формате, а не Content
mysql> SHOW CREATE PROCEDURE control_table;
+---------------+----------+------------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation |
+---------------+----------+------------------+----------------------+----------------------+--------------------+
| control_table | | NULL | utf8 | utf8_general_ci | latin1_swedish_ci |
+---------------+----------+------------------+----------------------+----------------------+--------------------+
1 row in set (0.28 sec)
Я выполнил это с помощью MySQL Client и mySQL Client Workbench, не смог просмотреть процедуру
Процедуры хранятся в information_schema.routines. Создание show видит запись здесь для control_table, но процедура_определения пуста - это говорит о том, что кто-то изменил информацию_схемы. Вы можете проверить содержимое information_schema.routines с помощью простого выбора -
select routine_name,routine_definition
from information_schema.ROUTINES
where routine_name = 'control_table'
== ЭТО выход =====
mysql> select routine_name,routine_definition
-> from information_schema.ROUTINES
-> where routine_name = 'control_table'
-> ;
+---------------------------------+--------------------+
| routine_name | routine_definition |
+---------------------------------+--------------------+
| control_table | NULL |
+---------------------------------+--------------------+
1 row in set (0.28 sec)
Если вам необходимо обновить тело без стандартных инструкций SQL (DROP/CREATE PROCEDURE), вы можете использовать следующую инструкцию:
UPDATE mysql.proc SET body='begin select 2 from dual; end' WHERE 'name' = 'control_table';