Список збережених процедур / функцій Командний рядок Mysql


Відповіді:


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/uk/show.html
IvanD

2
Ну я не впевнений, чому ви це говорите, допоможіть шоу добре працює для мене за допомогою MySQL 5.0.95 на centos 6.3
h4unt3r

Він працює, якщо ви використовуєте власний клієнт командного рядка mysqls. Ні, тому я віддаю перевагу онлайн-довідці.
Ледунд

Це найкраща відповідь
Колонь Каньйон

87

Для перегляду процедури в імені мудрий

select name from mysql.proc 

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

select * from mysql.proc 

4
це набагато чистіша презентація, ніж інші, особливо якщо ви перебуваєте в меншому терміналі. Дякую.
користувач1527227

Цю відповідь я select db,name,type from mysql.proc where db<>'sys';змінив для отримання додаткової інформації та менш вбудованої системної крути.
pbnelson

47

Більш конкретний спосіб:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'

4
він також працюватиме без використання AND Type = 'ПРОЦЕДУРА' також,
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

Варіація публікації Praveenkumar_V:

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.