Список хранимых процедур / функций Mysql Command Line

474

Как я могу увидеть список хранимых процедур или хранимых функций в командной строке mysql, как show tables;или show databases;команды.

systemsfault
источник

Ответы:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
Фредрик
источник
2
Есть ли способ найти текущее имя хранимой процедуры? Я считаю, что это object_name(@@procid) в SSMS что-нибудь подобное в MySql?
Мохаммед Замир
1
Если пользователь имеет привилегию EXECUTE, или еще, это покажет пустой список.
MJB
211
show procedure status

покажет вам хранимые процедуры.

show create procedure MY_PROC

покажет вам определение процедуры. А также

help show

покажет вам все доступные опции для showкоманды.


источник
1
Как указал Кодлер, справочное шоу не работает, поскольку справка - это инструкция командной строки mysql. Чтобы получить больше информации о команде SHOW, перейдите прямо на страницу документации MySQL по адресу: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD
2
Ну, я не уверен, почему вы так говорите, справочное шоу отлично работает для меня, используя MySQL 5.0.95 на centos 6.3
h4unt3r
Это работает, если вы используете собственный клиент командной строки mysqls. Я не, поэтому я предпочитаю онлайн ссылку.
Ледхунд
Это лучший ответ
Каньон Колоб
87

Для просмотра процедуры во имя мудрый

select name from mysql.proc 

приведенный ниже код используется для перечисления всей процедуры, а приведенный ниже код дает тот же результат, что и состояние процедуры show

select * from mysql.proc 
Praveenkumar_V
источник
4
это намного более чистое представление, чем другие, особенно если вы находитесь в небольшом терминале. Спасибо.
user1527227
Я развил этот ответ в select db,name,type from mysql.proc where db<>'sys';немного больше информации и меньше встроенной системы kruft.
pbnelson
47

Более конкретный способ:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
Сассман
источник
4
он также будет работать без использования AND Type = 'PROCEDURE',
normalUser
33

Как указано выше,

show procedure status;

Действительно покажет список процедур, но покажет все из них, для всего сервера.

Если вы хотите видеть только те, в одной базе данных, попробуйте это:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
источник
Аналогично, ПОКАЗАТЬ СТАТУС ФУНКЦИИ, ГДЕ Db = 'имя_базы данных'; дает вам функции.
Дэвид А. Грей
29

Альтернатива:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
источник
21

Я предпочитаю что-то, что:

  1. Перечисляет как функции, так и процедуры,
  2. Позвольте мне знать, какие есть,
  3. Дает названия и типы процедур и ничего больше ,
  4. Фильтрует результаты по текущей базе данных, а не по текущему определителю
  5. Сортирует результат

Сшивая вместе из других ответов в этой теме, я в конечном итоге

select 
  name, type 
from 
  mysql.proc 
where 
  db = database() 
order by 
  type, name;

... что приводит к результатам, которые выглядят так:

mysql> select name, type from mysql.proc where db = database() order by type, name;
+------------------------------+-----------+
| name                         | type      |
+------------------------------+-----------+
| get_oldest_to_scan           | FUNCTION  |
| get_language_prevalence      | PROCEDURE |
| get_top_repos_by_user        | PROCEDURE |
| get_user_language_prevalence | PROCEDURE |
+------------------------------+-----------+
4 rows in set (0.30 sec)
Джон Хаугеланд
источник
Комментарии тоже полезны.
дольмен
15

использовать этот:

SHOW PROCEDURE STATUS;
Код L ღ ver
источник
11

Показывает все хранимые процедуры:

SHOW PROCEDURE STATUS;

Показывает все функции:

SHOW FUNCTION STATUS;

Показывает определение указанной процедуры:

SHOW CREATE PROCEDURE [PROC_NAME];

Показывает все процедуры данной базы данных:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
оптимизатор
источник
9

Вариант поста Правеенкумар_В:

SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE';
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'FUNCTION';

..и это потому, что мне нужно было сэкономить время после некоторой уборки:

SELECT CONCAT(
     "GRANT EXECUTE ON PROCEDURE `"
    ,`name`
    ,"` TO username@'%'; -- "
    ,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'PROCEDURE';

SELECT CONCAT(
     "GRANT EXECUTE ON FUNCTION `"
    ,`name`
    ,"` TO username@'%'; -- "
    ,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'FUNCTION';
trapper_hag
источник
8

Чтобы показать только ваш:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Чарли Скилбек
источник
3
Общепринято ставить ключевые слова SQL во всех заглавных буквах, а имена столбцов, таблиц и т. Д. В нижнем регистре.
Сагар
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Сунил Кумар
источник
5

Если вы хотите отобразить процедуру сохранения для текущей выбранной базы данных,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

это будет список подпрограмм на основе текущей выбранной базы данных

ОБНОВЛЕНО, чтобы перечислить функции в вашей базе данных

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="FUNCTION";

перечислить процедуры / хранимые процедуры в вашей базе данных,

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="PROCEDURE";

перечислить таблицы в вашей базе данных,

select * from information_schema.TABLES WHERE TABLE_TYPE="BASE TABLE" AND TABLE_SCHEMA="YOUR DATABASE NAME";

для просмотра списка в вашей базе данных,

способ 1:

select * from information_schema.TABLES WHERE TABLE_TYPE="VIEW" AND TABLE_SCHEMA="YOUR DATABASE NAME";

способ 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
Мохидин бен Мухаммед
источник
1
                           show procedure status;

с помощью этой команды вы можете увидеть все процедуры в базах данных

Каран
источник
0

Мой любимый рендеринг списка процедур текущей базы данных: имя, список параметров, комментарий

SELECT specific_name AS name, param_list AS params, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'PROCEDURE';

Добавьте возврат для функций:

SELECT specific_name AS name, param_list AS params, `returns`, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'FUNCTION';
дольмен
источник
0

Список пользователей это процедуры и функции для всех баз данных :

SELECT 
    `ROUTINE_SCHEMA` AS `database`
    ,`ROUTINE_TYPE` AS `type`
    ,`SPECIFIC_NAME` AS `name`
    ,`DTD_IDENTIFIER` AS `data_type`
FROM 
    `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
  `definer` LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
ORDER BY
    `database`
    ,`type`
    ,`name`
;

Перечислите пользовательские процедуры и функции для используемой базы данных :

SELECT 
    `ROUTINE_SCHEMA` AS `database`
    ,`ROUTINE_TYPE` AS `type`
    ,`SPECIFIC_NAME` AS `name`
    ,`DTD_IDENTIFIER` AS `data_type`
FROM 
    `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
  `definer` LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
AND
   `ROUTINE_SCHEMA` = DATABASE()
ORDER BY
    `type`
    ,`name`
;
Jimmix
источник
-2

Используйте следующий запрос для всех процедур:

select * from sysobjects 
where type='p'
order by crdate desc
Мвесигва
источник