Список хранимых процедур / функций Mysql Command Line - PullRequest
450 голосов
/ 09 апреля 2009

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

Ответы [ 16 ]

708 голосов
/ 09 апреля 2009
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
206 голосов
/ 09 апреля 2009
show procedure status

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

show create procedure MY_PROC

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

help show

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

83 голосов
/ 26 сентября 2012

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

select name from mysql.proc 

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

select * from mysql.proc 
42 голосов
/ 06 марта 2012

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

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
30 голосов
/ 09 ноября 2011

Как уже упоминалось выше,

show procedure status;

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

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

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
26 голосов
/ 13 февраля 2013

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

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
21 голосов
/ 18 апреля 2016

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

  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)
14 голосов
/ 09 апреля 2009

используйте это:

SHOW PROCEDURE STATUS;
9 голосов
/ 27 августа 2014

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

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';
8 голосов
/ 27 декабря 2012

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

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
...