Lista przechowywanych procedur / funkcji Linia poleceń MySQL

474

Jak mogę zobaczyć listę procedur przechowywanych lub funkcji przechowywanych w wierszu poleceń mysql, takich jak show tables;lub show databases;polecenia.

awaria systemu
źródło

Odpowiedzi:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
Fredrik
źródło
2
Czy istnieje sposób na znalezienie bieżącej nazwy procedury składowanej? Wierzę, że to jest object_name(@@procid) w SSMS coś takiego w MySql?
Mohammed Zameer
1
Jeśli użytkownik ma uprawnienia EXECUTE, w przeciwnym razie wyświetli się pusta lista.
mjb 12.01.18
211
show procedure status

pokaże procedury przechowywane.

show create procedure MY_PROC

pokaże ci definicję procedury. I

help show

pokaże wszystkie dostępne opcje showpolecenia.


źródło
1
Jak zauważył Codler, help help nie działa, ponieważ help jest instrukcją wiersza poleceń mysql. Aby uzyskać więcej informacji na temat polecenia POKAŻ, przejdź bezpośrednio do strony dokumentacji MySQL pod adresem: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD
2
Cóż, nie jestem pewien, dlaczego tak mówisz, pomoc pokaż działa dla mnie dobrze, używając MySQL 5.0.95 na centos 6.3
h4unt3r
Działa, jeśli używasz własnego klienta wiersza poleceń mysqls. Ja nie, więc wolę referencje online.
Ledhund
To najlepsza odpowiedź
Kanion Kolob
87

Do procedury przeglądania z nazwy

select name from mysql.proc 

poniższy kod użyty do wyświetlenia listy wszystkich procedur, a poniższy kod daje taki sam wynik, jak status procedury pokazującej

select * from mysql.proc 
Praveenkumar_V
źródło
4
jest to o wiele czystsza prezentacja niż inne, szczególnie jeśli jesteś w mniejszym terminalu. dzięki.
user1527227,
Przekształciłem tę odpowiedź na select db,name,type from mysql.proc where db<>'sys';nieco więcej informacji i mniej wbudowanego systemu Kruft.
pbnelson
47

Bardziej konkretny sposób:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
Sassman
źródło
4
będzie działał również bez użycia AND Type = 'PROCEDURE',
normalUser
33

Jak wspomniano powyżej,

show procedure status;

Rzeczywiście pokaże listę procedur, ale pokazuje je wszystkie, dla całego serwera.

Jeśli chcesz zobaczyć tylko te w jednej bazie danych, spróbuj tego:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
źródło
Podobnie, POKAŻ STATUS FUNKCJI GDZIE Db = 'nazwa bazy danych'; daje ci funkcje.
David A. Gray,
29

Alternatywny:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
źródło
21

Preferuję coś, co:

  1. Zawiera zarówno funkcje, jak i procedury,
  2. Pozwala mi wiedzieć, które są które,
  3. Podaje nazwy i typy procedur i nic więcej ,
  4. Filtruje wyniki według bieżącej bazy danych, a nie bieżącego definicji
  5. Sortuje wynik

Łącząc z innymi odpowiedziami w tym wątku, kończę

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

... co daje wyniki, które wyglądają tak:

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)
John Haugeland
źródło
Komentarze też są pomocne.
dolmen
15

Użyj tego:

SHOW PROCEDURE STATUS;
Kod L ღ ver
źródło
11

Pokazuje wszystkie procedury przechowywane:

SHOW PROCEDURE STATUS;

Pokazuje wszystkie funkcje:

SHOW FUNCTION STATUS;

Pokazuje definicję określonej procedury:

SHOW CREATE PROCEDURE [PROC_NAME];

Pokazuje wszystkie procedury danej bazy danych:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Optymalizator
źródło
9

Wariacja na temat postu Praveenkumar_V:

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

..i dlatego, że musiałem zaoszczędzić czas po sprzątaniu:

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';
traper_hag
źródło
8

Aby pokazać tylko swoje:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Charlie Skilbeck
źródło
3
Powszechną konwencją jest umieszczanie słów kluczowych SQL we wszystkich wielkich literach, a nazwy kolumn, nazwy tabel itp. Są pisane małymi literami.
Sagar,
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Sunil Kumar
źródło
5

Jeśli chcesz wyświetlić procedurę sklepu dla bieżącej wybranej bazy danych,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

wyświetli listę procedur w oparciu o aktualnie wybraną bazę danych

ZAKTUALIZOWANO, aby wyświetlić funkcje w bazie danych

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

aby wymienić procedury / procedury przechowywania w bazie danych,

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

aby wyświetlić tabele w bazie danych,

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

aby wyświetlić listę widoków w bazie danych,

metoda 1:

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

metoda 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
Mohideen bin Mohammed
źródło
1
                           show procedure status;

za pomocą tego polecenia możesz zobaczyć wszystkie procedury w bazach danych

Karan
źródło
0

Moje ulubione renderowanie listy procedur bieżącej bazy danych: nazwa, lista parametrów, komentarz

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

Dodaj zwroty dla funkcji:

SELECT specific_name AS name, param_list AS params, `returns`, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'FUNCTION';
dolmen
źródło
0

Lista autora procedury i funkcje dla wszystkich baz danych :

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

Lista autora procedury i funkcje do bazy danych w użyciu :

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
źródło
-2

Użyj następującej kwerendy dla wszystkich procedur:

select * from sysobjects 
where type='p'
order by crdate desc
mwesigwa
źródło