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


474

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

Ответы:


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 

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';

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


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)

Комментарии тоже полезны.
дольмен


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';

8

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

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

3
Общепринято ставить ключевые слова SQL во всех заглавных буквах, а имена столбцов, таблиц и т. Д. В нижнем регистре.
Сагар


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`
;

-2

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

select * from sysobjects 
where type='p'
order by crdate desc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.