Lista przechowywanych procedur / funkcji Linia poleceń MySQL


Odpowiedzi:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

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.


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 

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'

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

Podobnie, POKAŻ STATUS FUNKCJI GDZIE Db = 'nazwa bazy danych'; daje ci funkcje.
— David A. Gray,


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)

Komentarze też są pomocne.
— dolmen


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

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

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)), '%'));

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'

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

1
                           show procedure status;

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


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

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

-2

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

select * from sysobjects 
where type='p'
order by crdate desc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.