SHOW CREATE PROCEDURE имя_процесса не отображает содержание процедуры

0

Привет, я борюсь с проблемой, когда мне нужно просмотреть содержимое хранимой процедуры, для чего у меня есть команда, чтобы получить имя процедуры

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, не смог просмотреть процедуру

Теги:
database
stored-procedures
mysql-workbench

2 ответа

1

Процедуры хранятся в 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)
0

Если вам необходимо обновить тело без стандартных инструкций SQL (DROP/CREATE PROCEDURE), вы можете использовать следующую инструкцию:

UPDATE  mysql.proc SET body='begin select 2 from dual; end' WHERE 'name' = 'control_table'; 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню