Lista de procedimientos / funciones almacenados Mysql Command Line


Respuestas:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

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.


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 

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'

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

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


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)

Los comentarios también son útiles.
dolmen


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]';

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

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)), '%'));

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'

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

1
                           show procedure status;

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


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

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

-2

Use la siguiente consulta para todos los procedimientos:

select * from sysobjects 
where type='p'
order by crdate desc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.