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.