Come posso vedere l'elenco delle procedure memorizzate o delle funzioni memorizzate nella riga di comando show tables;
o nei show databases;
comandi mysql .
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:
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 show
comando.
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
select db,name,type from mysql.proc where db<>'sys';
un po 'più di informazioni e meno kruft di sistema integrato.
Un modo più specifico:
SHOW PROCEDURE STATUS
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
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';
La mia preferenza è per qualcosa che:
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)
Usa questo:
SHOW PROCEDURE STATUS;
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]';
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';
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)), '%'));
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
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";
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';
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`
;
object_name(@@procid)
in SSMS qualcosa di simile in MySql?