Lista de procedimientos / funciones almacenados Mysql Command Line

474

¿Cómo puedo ver la lista de los procedimientos almacenados o las funciones almacenadas en la línea de comandos de mysql como show tables;o show databases;comandos.

defecto del sistema
fuente

Respuestas:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
fredrik
fuente
2
¿Hay alguna manera de encontrar el nombre del procedimiento almacenado actual? ¿Creo que está object_name(@@procid) en SSMS algo así en MySql?
Mohammed Zameer
1
Si el usuario tiene el privilegio de EXECUTE, o si no, esto mostrará una lista vacía.
mjb
211
show procedure status

le mostrará los procedimientos almacenados.

show create procedure MY_PROC

le mostrará la definición de un procedimiento. Y

help show

le mostrará todas las opciones disponibles para el showcomando.


fuente
1
Como señaló Codler, help show no funciona, ya que help es una instrucción de línea de comando mysql. Para obtener más información sobre el comando SHOW, ir directamente a la página de documentación de MySQL en: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD
2
Bueno, no estoy seguro de por qué dices eso, el programa de ayuda funciona bien para mí usando MySQL 5.0.95 en centos 6.3
h4unt3r
Funciona si usas cliente de línea de comando propio mysqls. No lo hago, así que prefiero la referencia en línea.
Ledhund
Esta es la mejor respuesta
Kolob Canyon
87

Para ver el procedimiento en nombre sabio

select name from mysql.proc 

el siguiente código se utiliza para enumerar todos los procedimientos y el siguiente código es el mismo resultado que mostrar el estado del procedimiento

select * from mysql.proc 
Praveenkumar_V
fuente
44
Esta es una presentación mucho más limpia que las otras, especialmente si está en una terminal más pequeña. Gracias.
user1527227
Desarrollé esta respuesta select db,name,type from mysql.proc where db<>'sys';para obtener un poco más de información y menos kruft del sistema incorporado.
pbnelson
47

Una forma más específica:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
sassman
fuente
44
funcionará sin usar AND Type = 'PROCEDURE' también,
normalUser
33

Como se ha mencionado más arriba,

show procedure status;

De hecho, mostrará una lista de procedimientos, pero muestra todos ellos, en todo el servidor.

Si desea ver solo los que están en una sola base de datos, intente esto:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
fuente
Del mismo modo, SHOW FUNCTION STATUS WHERE Db = 'databasename'; te da las funciones.
David A. Gray
29

Alternativa:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
fuente
21

Mi preferencia es por algo que:

  1. Enumera funciones y procedimientos,
  2. Me deja saber cuáles son cuáles,
  3. Da los nombres y tipos de procedimientos y nada más ,
  4. Filtra los resultados por la base de datos actual, no por el definidor actual
  5. Ordena el resultado

Uniendo a partir de otras respuestas en este hilo, termino con

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

... que termina con resultados como este:

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
fuente
Los comentarios también son útiles.
dolmen
15

utilizar este:

SHOW PROCEDURE STATUS;
Código L ღ ver
fuente
11

Muestra todos los procedimientos almacenados:

SHOW PROCEDURE STATUS;

Muestra todas las funciones:

SHOW FUNCTION STATUS;

Muestra la definición del procedimiento especificado:

SHOW CREATE PROCEDURE [PROC_NAME];

Le muestra todos los procedimientos de la base de datos dada:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Optimizador
fuente
9

Una variación en la publicación de Praveenkumar_V:

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

..y esto porque necesitaba ahorrar tiempo después de algunas tareas de limpieza:

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
fuente
8

Para mostrar solo el tuyo:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Charlie Skilbeck
fuente
3
Es una convención común poner palabras clave de SQL en mayúsculas, mientras se colocan los nombres de columnas, nombres de tablas, etc. en minúsculas.
Sagar
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Sunil Kumar
fuente
5

Si desea enumerar el Procedimiento de almacenamiento para la base de datos seleccionada actual,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

enumerará rutinas basadas en la base de datos seleccionada actual

ACTUALIZADO para enumerar las funciones en su base de datos

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

para enumerar rutinas / procedimientos de almacenamiento en su base de datos,

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

para enumerar tablas en su base de datos,

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

para enumerar vistas en su base de datos,

Método 1:

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

método 2:

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

Con este comando puede ver todos los procedimientos en las bases de datos

Karan
fuente
0

Mi representación favorita de la lista de procedimientos de la base de datos actual: nombre, lista de parámetros, comentario

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

Agregar devoluciones para funciones:

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

Enumere los procedimientos y funciones del usuario para todas las bases de datos :

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

Enumere los procedimientos y funciones del usuario para la base de datos en 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`
;
Jimmix
fuente
-2

Use la siguiente consulta para todos los procedimientos:

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