Elenco delle procedure / funzioni memorizzate Riga di comando di Mysql


474

Come posso vedere l'elenco delle procedure memorizzate o delle funzioni memorizzate nella riga di comando show tables;o nei show databases;comandi mysql .

Risposte:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

2
C'è un modo per trovare il nome della procedura memorizzata corrente? Credo che sia object_name(@@procid) in SSMS qualcosa di simile in MySql?
Mohammed Zameer,

1
Se l'utente ha il privilegio di EXECUTE, altrimenti, questo mostrerà un elenco vuoto.
mjb,

211
show procedure status

ti mostrerà le procedure memorizzate.

show create procedure MY_PROC

ti mostrerà la definizione di una procedura. E

help show

ti mostrerà tutte le opzioni disponibili per il showcomando.


1
Come ha sottolineato Codler, help show non funziona poiché help è un'istruzione da riga di comando mysql. Per ottenere maggiori informazioni sul comando SHOW, vai direttamente alla pagina della documentazione di MySQL all'indirizzo: dev.mysql.com/doc/refman/5.1/it/show.html
IvanD

2
Beh, non sono sicuro del motivo per cui lo dici, aiutami a mostrare che funziona bene con MySQL 5.0.95 su centos 6.3
h4unt3r

Funziona se usi il client della riga di comando di mysqls. Non lo so, quindi preferisco il riferimento online.
Ledhund,

Questa è la risposta migliore
Kolob Canyon

87

Per visualizzare la procedura in base al nome

select name from mysql.proc 

il codice di seguito utilizzato per elencare tutta la procedura e il codice di seguito fornisce lo stesso risultato dello stato della procedura di visualizzazione

select * from mysql.proc 

4
questa è una presentazione molto più pulita rispetto alle altre, specialmente se ti trovi in ​​un terminale più piccolo. Grazie.
user1527227

Ho evoluto questa risposta in select db,name,type from mysql.proc where db<>'sys';un po 'più di informazioni e meno kruft di sistema integrato.
pbnelson,

47

Un modo più specifico:

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

4
funzionerà senza usare AND Type = 'PROCEDURE' anche,
normalUser

33

Come menzionato sopra,

show procedure status;

Mostrerà davvero un elenco di procedure, ma mostra tutte , a livello di server.

Se vuoi vedere solo quelli in un singolo database, prova questo:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

Allo stesso modo, MOSTRARE STATO FUNZIONI DOVE = 'nome database'; ti dà le funzioni.
David A. Gray,


21

La mia preferenza è per qualcosa che:

  1. Elenca sia funzioni che procedure,
  2. Fammi sapere quali sono,
  3. Fornisce i nomi e i tipi delle procedure e nient'altro ,
  4. Filtra i risultati per il database corrente, non per il definitore corrente
  5. Ordina il risultato

Ricucendo le altre risposte in questo thread, finisco con

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

... che ti porta a risultati simili a questo:

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)

Anche i commenti sono utili.
dolmen


11

Mostra tutte le procedure memorizzate:

SHOW PROCEDURE STATUS;

Mostra tutte le funzioni:

SHOW FUNCTION STATUS;

Mostra la definizione della procedura specificata:

SHOW CREATE PROCEDURE [PROC_NAME];

Ti mostra tutte le procedure del database dato:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';

9

Una variazione sul post di Praveenkumar_V:

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

..e questo perché avevo bisogno di risparmiare tempo dopo alcune pulizie:

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

Per mostrare solo il tuo:

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

3
È una convenzione comune mettere le parole chiave SQL in maiuscolo, mettendo i nomi delle colonne, i nomi delle tabelle, ecc. In minuscolo.
Sagar,

8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'

5

Se si desidera elencare la procedura di archiviazione per il database attualmente selezionato,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

elencherà le routine in base al database attualmente selezionato

AGGIORNATO per elencare le funzioni nel database

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

per elencare routine / procedure di archiviazione nel database,

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

per elencare le tabelle nel database,

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

per elencare le visualizzazioni nel database,

metodo 1:

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

metodo 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";

1
                           show procedure status;

usando questo comando puoi vedere tutte le procedure nei database


0

Il mio rendering preferito dell'elenco delle procedure del database corrente: nome, elenco parametri, commento

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

Aggiungi resi per le funzioni:

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

0

Elencare le procedure e le funzioni dell'utente per tutti i database :

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

Elencare le procedure e le funzioni dell'utente per il database in uso :

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

Utilizzare la seguente query per tutte le procedure:

select * from sysobjects 
where type='p'
order by crdate desc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.