Lista de procedimentos / funções armazenados da linha de comando do MySQL

474

Como posso ver a lista dos procedimentos armazenados ou funções armazenadas na linha de comando do mysql como show tables;ou show databases;comandos.

falha de sistema
fonte

Respostas:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
fredrik
fonte
2
Existe uma maneira de encontrar o nome atual do procedimento armazenado? Eu acredito que é object_name(@@procid) no SSMS algo assim no MySql?
Mohammed Zameer
1
Se o usuário tiver o privilégio de EXECUTE, ou então, isso mostrará a lista vazia.
Mjb
211
show procedure status

irá mostrar os procedimentos armazenados.

show create procedure MY_PROC

irá mostrar a definição de um procedimento. E

help show

irá mostrar todas as opções disponíveis para o showcomando.


fonte
1
Como Codler apontou, help show não funciona, pois help é uma instrução de linha de comando do mysql. Para obter mais informações sobre o comando SHOW, vá diretamente para a página de documentação do MySQL em: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD
2
Bem, eu não sei por que você diz isso, ajudam a mostrar funciona bem para mim usando o MySQL 5.0.95 no CentOS 6.3
h4unt3r
Funciona se você usar o próprio cliente de linha de comando do mysqls. Não, então prefiro a referência online.
Ledhund
Esta é a melhor resposta
Kolob Canyon
87

Para o procedimento de exibição no nome

select name from mysql.proc 

o código abaixo usado para listar todo o procedimento e o código abaixo fornece o mesmo resultado que o status do procedimento de exibição

select * from mysql.proc 
Praveenkumar_V
fonte
4
Esta é uma apresentação muito mais limpa do que as outras, especialmente se você estiver em um terminal menor. obrigado.
user1527227
Eu desenvolvi essa resposta para select db,name,type from mysql.proc where db<>'sys';obter um pouco mais de informação e menos kruft de sistema embutido.
Pbnelson
47

Uma maneira mais específica:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
sassman
fonte
4
funcionará sem usar AND Type = 'PROCEDURE' também,
normalUser
33

Como acima mencionado,

show procedure status;

De fato, mostrará uma lista de procedimentos, mas mostra todos eles, em todo o servidor.

Se você deseja ver apenas aqueles em um único banco de dados, tente o seguinte:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
fonte
Da mesma forma, SHOW FUNCTION STATUS WHERE Db = 'databasename'; fornece as funções.
David A. Gray
29

Alternativa:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
fonte
21

Minha preferência é por algo que:

  1. Lista funções e procedimentos,
  2. Me permite saber quais são quais,
  3. Fornece nomes e tipos de procedimentos e nada mais ,
  4. Filtra os resultados pelo banco de dados atual, não pelo definidor atual
  5. Classifica o resultado

Reunindo outras respostas neste tópico, termino com

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

... o que resulta em resultados parecidos com o seguinte:

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
fonte
Comentários também são úteis.
dolmen
15

usa isto:

SHOW PROCEDURE STATUS;
Code Lღver
fonte
11

Mostra todos os procedimentos armazenados:

SHOW PROCEDURE STATUS;

Mostra todas as funções:

SHOW FUNCTION STATUS;

Mostra a definição do procedimento especificado:

SHOW CREATE PROCEDURE [PROC_NAME];

Mostra todos os procedimentos do banco de dados fornecido:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Optimizer
fonte
9

Uma variação na postagem 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';

..e isso porque eu precisava economizar tempo depois de algumas tarefas domésticas:

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

Para mostrar apenas o seu:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Charlie Skilbeck
fonte
3
É uma convenção comum colocar palavras-chave SQL em todas as maiúsculas, enquanto coloca nomes de colunas, nomes de tabelas etc. em minúsculas.
Sagar
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Sunil Kumar
fonte
5

Se você deseja listar o Procedimento de armazenamento para o banco de dados selecionado atual,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

Ele listará rotinas com base no banco de dados selecionado atual

ATUALIZADO para listar as funções em seu banco de dados

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

para listar rotinas / procedimentos de armazenamento em seu banco de dados,

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

para listar tabelas em seu banco de dados,

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

para listar visualizações no seu banco de dados,

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
fonte
1
                           show procedure status;

Usando este comando, você pode ver todos os procedimentos nos bancos de dados

Karan
fonte
0

Minha renderização favorita da lista de procedimentos do banco de dados atual: nome, lista de parâmetros, comentário

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

Adicione retornos para funções:

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

Listar procedimentos e funções do usuário para todos os bancos de dados :

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

Liste os procedimentos e funções do usuário para o banco de dados em 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
fonte
-2

Use a seguinte consulta para todos os procedimentos:

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