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


Respostas:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

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.


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 

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'

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

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


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)

Comentários também são úteis.
dolmen


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

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

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

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'

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

1
                           show procedure status;

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


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

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

-2

Use a seguinte consulta para todos os procedimentos:

select * from sysobjects 
where type='p'
order by crdate desc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.