Liste der gespeicherten Prozeduren / Funktionen MySQL-Befehlszeile

474

Wie kann ich die Liste der gespeicherten Prozeduren oder gespeicherten Funktionen in der MySQL-Befehlszeile wie show tables;oder show databases;Befehle sehen.

Systemfehler
quelle

Antworten:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
fredrik
quelle
2
Gibt es eine Möglichkeit, den aktuellen Namen der gespeicherten Prozedur zu finden? Ich glaube, es ist object_name(@@procid) in SSMS so etwas in MySql?
Mohammed Zameer
1
Wenn der Benutzer das Privileg EXECUTEhat oder sonst, wird eine leere Liste angezeigt.
MJB
211
show procedure status

zeigt Ihnen die gespeicherten Prozeduren.

show create procedure MY_PROC

zeigt Ihnen die Definition einer Prozedur. Und

help show

zeigt Ihnen alle verfügbaren Optionen für den showBefehl.


quelle
1
Wie Codler betonte, funktioniert help show nicht, da help eine MySQL-Befehlszeilenanweisung ist. Weitere Informationen zum Befehl SHOW erhalten Sie direkt auf der MySQL-Dokumentationsseite unter: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD
2
Nun, ich bin mir nicht sicher, warum du das sagst. Die Hilfeshow funktioniert gut mit MySQL 5.0.95 auf Centos 6.3
h4unt3r
Es funktioniert, wenn Sie den eigenen Befehlszeilenclient von mysqls verwenden. Ich nicht, deshalb bevorzuge ich die Online-Referenz.
Ledhund
Dies ist die beste Antwort
Kolob Canyon
87

Zum Anzeigen des Verfahrens in Bezug auf den Namen

select name from mysql.proc 

Der folgende Code, der zum Auflisten aller Prozeduren verwendet wird, und der folgende Code geben dasselbe Ergebnis wie der Status der Prozedur anzeigen

select * from mysql.proc 
Praveenkumar_V
quelle
4
Dies ist eine viel sauberere Präsentation als die anderen, insbesondere wenn Sie sich in einem kleineren Terminal befinden. Vielen Dank.
user1527227
Ich habe diese Antwort select db,name,type from mysql.proc where db<>'sys';für ein bisschen mehr Informationen und weniger eingebautes System kruft weiterentwickelt.
Pbnelson
47

Ein spezifischerer Weg:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
Sassman
quelle
4
es wird auch ohne AND Type = 'PROCEDURE'
funktionieren
33

Wie oben erwähnt,

show procedure status;

Zeigt zwar eine Liste von Prozeduren an, zeigt aber alle serverweit an.

Wenn Sie nur diejenigen in einer einzelnen Datenbank anzeigen möchten, versuchen Sie Folgendes:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
quelle
Ebenso SHOW FUNCTION STATUS WHERE Db = 'Datenbankname'; gibt Ihnen die Funktionen.
David A. Gray
29

Alternative:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
quelle
21

Ich bevorzuge etwas, das:

  1. Listet sowohl Funktionen als auch Verfahren auf.
  2. Lässt mich wissen, welche welche sind,
  3. Gibt die Namen und Typen der Prozeduren an und sonst nichts .
  4. Filtert die Ergebnisse nach der aktuellen Datenbank, nicht nach dem aktuellen Definierer
  5. Sortiert das Ergebnis

Wenn ich aus anderen Antworten in diesem Thread zusammennehme, habe ich am Ende

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

... was zu Ergebnissen führt, die so aussehen:

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
quelle
Kommentare sind auch hilfreich.
Dolmen
15

benutze das:

SHOW PROCEDURE STATUS;
Code L ღ ver
quelle
11

Zeigt alle gespeicherten Prozeduren an:

SHOW PROCEDURE STATUS;

Zeigt alle Funktionen:

SHOW FUNCTION STATUS;

Zeigt die Definition der angegebenen Prozedur an:

SHOW CREATE PROCEDURE [PROC_NAME];

Zeigt Ihnen alle Prozeduren der angegebenen Datenbank:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Optimierer
quelle
9

Eine Variation des Beitrags von Praveenkumar_V:

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

..und das, weil ich nach einigem Housekeeping Zeit sparen musste:

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';
trapper_hag
quelle
8

Um nur deine zu zeigen:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Charlie Skilbeck
quelle
3
Es ist üblich, SQL-Schlüsselwörter in Großbuchstaben zu setzen, während Spaltennamen, Tabellennamen usw. in Kleinbuchstaben geschrieben werden.
Sagar
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Sunil Kumar
quelle
5

Wenn Sie die Speicherprozedur für die aktuell ausgewählte Datenbank auflisten möchten,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

Es werden Routinen basierend auf der aktuell ausgewählten Datenbank aufgelistet

AKTUALISIERT , um Funktionen in Ihrer Datenbank aufzulisten

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

um Routinen / Speicherprozeduren in Ihrer Datenbank aufzulisten,

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

um Tabellen in Ihrer Datenbank aufzulisten,

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

um Ansichten in Ihrer Datenbank aufzulisten,

Methode 1:

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

Methode 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
Mohideen bin Mohammed
quelle
1
                           show procedure status;

Mit diesem Befehl können Sie alle Prozeduren in Datenbanken anzeigen

Karan
quelle
0

Mein Lieblings-Rendering der Prozedurliste der aktuellen Datenbank: Name, Parameterliste, Kommentar

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

Rückgaben für Funktionen hinzufügen:

SELECT specific_name AS name, param_list AS params, `returns`, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'FUNCTION';
Dolmen
quelle
0

Listen Sie die Prozeduren und Funktionen des Benutzers für alle Datenbanken auf :

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

Listen Sie die Prozeduren und Funktionen des Benutzers für die verwendete Datenbank auf :

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
quelle
-2

Verwenden Sie die folgende Abfrage für alle Verfahren:

select * from sysobjects 
where type='p'
order by crdate desc
mwesigwa
quelle