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.