2009-04-09 3 views

risposta

629
SHOW PROCEDURE STATUS; 
SHOW FUNCTION STATUS; 
+1

C'è un modo per trovare il nome della stored procedure corrente? Credo che sia 'object_name (@@ procid)' in SSMS qualcosa di simile in MySql? – xameeramir

+0

Se l'utente ha il privilegio di 'ESEGUI', altrimenti mostrerà la lista vuota. La visualizzazione della guida di – mjb

183
show procedure status 

vi mostrerà le stored procedure.

show create procedure MY_PROC 

mostrerà la definizione di una procedura. E

help show 

vi mostrerà tutte le opzioni disponibili per il comando show.

+3

non funziona. – Codler

+1

Come indicato da Codler, la visualizzazione della guida non funziona in quanto l'aiuto è un'istruzione della riga di comando mysql. Per ottenere maggiori informazioni sul comando SHOW, andare direttamente alla pagina di documentazione di MySQL all'indirizzo: http://dev.mysql.com/doc/refman/5.1/en/show.html – IvanD

+2

Beh, non sono sicuro del perché lo dici, help show funziona bene per me usando MySQL 5.0.95 su centos 6.3 – h4unt3r

13

uso questo:

SHOW PROCEDURE STATUS; 
24

Come accennato in precedenza,

show procedure status; 

sarà davvero mostrare un elenco di procedure, ma mostra tutte di loro, a livello di server.

Se volete vedere solo quelli in un unico database, provate questo:

SHOW PROCEDURE STATUS WHERE Db = 'databasename'; 
+0

questo funziona bene per me ...! –

+0

Allo stesso modo, SHOW FUNCTION STATUS WHERE Db = 'nomedatabase'; ti dà le funzioni. –

36

Un modo più specifico:

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

funzionerà senza utilizzare AND Type = 'PROCEDURE' anche, – normalUser

71

Per la procedura vista in nome saggio

select name from mysql.proc 

sotto il codice utilizzato per elencare tutta la procedura e sotto il codice è dare lo stesso risultato come lo stato della procedura di spettacolo

select * from mysql.proc 
+3

+1 per mostrare il nome solo modo! –

+1

questa è una presentazione molto più pulita rispetto agli altri, specialmente se si è in un terminale più piccolo. Grazie. – user1527227

7

Per mostrare solo tua:

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

Perché modificare in maiuscolo? È una convenzione? –

+3

È convenzione comune inserire parole chiave SQL in maiuscolo, inserendo nomi di colonne, nomi di tabelle, ecc. In lettere minuscole. – Sagar

20

Alternativa:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
0
      show procedure status; 

utilizzare questo comando è possibile vedere le tutte le procedure nei database

7

una variazione sul Praveenkumar_V di post:

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 un po 'di pulizia:

SELECT CONCAT(
    "GRANT EXECUTE ON PROCEDURE `" 
    ,`name` 
    ,"` TO [email protected]'%'; -- " 
    ,`comment` 
) 
FROM mysql.proc 
WHERE db = 'dbname' 
AND `type` = 'PROCEDURE'; 

SELECT CONCAT(
    "GRANT EXECUTE ON FUNCTION `" 
    ,`name` 
    ,"` TO [email protected]'%'; -- " 
    ,`comment` 
) 
FROM mysql.proc 
WHERE db = 'dbname' 
AND `type` = 'FUNCTION'; 
6
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name' 
-3

utilizzare la seguente query per tutte le procedure:

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

La mia preferenza è per qualcosa che:

  1. Elenca entrambe le funzioni e le procedure,
  2. Mi consente di sapere quali sono quali,
  3. Dà i nomi delle procedure e dei tipi e nient'altro,
  4. filtra i risultati per il database corrente, non il definitore corrente
  5. Ordinamenti il ​​risultato

cucire insieme da altre risposte a questo thread, finisco con

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

... che ti finisce con risultati che sembrano l ike 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) 
+0

Risposta perfetta, grazie! –

2

Se si desidera elencare Procedura Store per la corrente database selezionato,

SHOW PROCEDURE STATUS WHERE Db = DATABASE(); 

elencherà routine sulla base delle attuali database selezionato

0
SHOW PROCEDURE STATUS; 

mostra tutta la procedura di archiviazione.

SHOW FUNCTION STATUS; 

mostra tutte le funzioni.

SHOW CREATE PROCEDURE [PROC_NAME]; 

mostrerà la definizione della procedura specificata.

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

vi mostrerà tutte le procedure del database data.