2009-04-09 7 views

Respuesta

629
SHOW PROCEDURE STATUS; 
SHOW FUNCTION STATUS; 
+1

¿Hay alguna manera de encontrar el nombre del procedimiento almacenado actual? Creo que es 'object_name (@@ procid)' en SSMS algo como esto en MySql? – xameeramir

+0

Si el usuario tiene el privilegio de 'EJECUTAR', o de lo contrario, esto mostrará la lista vacía. – mjb

183
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 comando show.

+3

ayuda a mostrar no funciona. – Codler

+1

Como señaló Codler, la demostración de ayuda no funciona ya que la ayuda es una instrucción de línea de comandos de mysql. Para obtener más información sobre el comando SHOW, vaya directamente a la página de documentación de MySQL en: http://dev.mysql.com/doc/refman/5.1/en/show.html – IvanD

+2

Bueno, no estoy seguro de por qué dice eso, help show funciona bien para mí usando MySQL 5.0.95 en centos 6.3 – h4unt3r

13

uso esto:

SHOW PROCEDURE STATUS; 
24

Como se mencionó anteriormente,

show procedure status; 

de hecho va a mostrar una lista de procedimientos, pero muestra todo de ellos, a nivel de servidor.

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

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

¡esto funciona bien para mí ...! –

+0

Del mismo modo, MOSTRAR ESTADO DE FUNCIÓN DONDE Db = 'databasename'; te da las funciones. –

36

Una forma más específica:

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

funcionará sin usar AND Type = 'PROCEDURE' también, – normalUser

71

Para el procedimiento vista en nombre sabia

select name from mysql.proc 

debajo del código usado para enumerar todo el procedimiento y el siguiente código es dar el mismo resultado que mostrar el estado del procedimiento

select * from mysql.proc 
+3

+1 ¡para mostrar el único nombre! –

+1

esta es una presentación mucho más limpia que las otras, especialmente si se encuentra en una terminal más pequeña. Gracias. – user1527227

7

Para mostrar solamente los suyos:

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

¿Por qué editar en mayúsculas? ¿Es una convención? –

+3

Es una convención común poner palabras clave SQL en mayúsculas, al tiempo que pone nombres de columnas, tablas, etc. en minúsculas. – Sagar

20

Alternativa:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
0
      show procedure status; 

usando este comando se puede ver los todos los procedimientos en bases de datos

7

una variación en la Praveenkumar_V publicación:

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 para ahorrar tiempo después de algún servicio de limpieza:

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

utilizar la siguiente consulta para todos los procedimientos:

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

Mi preferencia es por algo que:

  1. Lista de funciones y procedimientos,
  2. Permite saber cuáles son cuáles,
  3. Da nombres de los procedimientos y de los tipos y nada más,
  4. Resultados de la base de datos actual, no el definidor actual
  5. Clasifica el resultado

uniendo de otros las respuestas en este hilo, termino con

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

... que lo termina con resultados que parecen l ike esto:

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

¡Respuesta perfecta, gracias! –

2

Si desea enumerar Procedimiento tienda de base de datos seleccionada actual,

SHOW PROCEDURE STATUS WHERE Db = DATABASE(); 

aparecerá una lista de rutinas basadas en la base de datos actual seleccionado

0
SHOW PROCEDURE STATUS; 

muestra todas las procedimientos almacenados.

SHOW FUNCTION STATUS; 

muestra todas las funciones.

SHOW CREATE PROCEDURE [PROC_NAME]; 

mostrará la definición del procedimiento especificado.

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

le mostrará todos los procedimientos de la base de datos dada.

Cuestiones relacionadas