ストアドプロシージャ/関数のリストMysqlコマンドライン


474

show tables;またはshow databases;コマンドのようなmysqlコマンドラインでストアドプロシージャまたはストアドファンクションのリストを表示するにはどうすればよいですか。

回答:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

2
現在のストアドプロシージャ名を見つける方法はありますか?私はそれがだと信じobject_name(@@procid) SSMSでMySQLでは、このようなもの?
Mohammed Zameer 2015年

1
ユーザーがの権限を持っている場合は、EXECUTE空のリストが表示されます。
mjb 2018年

211
show procedure status

ストアドプロシージャが表示されます。

show create procedure MY_PROC

手順の定義が表示されます。そして

help show

showコマンドで使用可能なすべてのオプションが表示されます。


1
Codlerが指摘したように、ヘルプはmysqlコマンドライン命令であるため、help showは機能しません。SHOWコマンドの詳細については、次のMySQLドキュメントページに直接アクセスして
doc

2
まあ、なぜそう言うのかわかりませんが、centos 6.3でMySQL 5.0.95を使用すると、help showがうまく機能します
h4unt3r

mysqls独自のコマンドラインクライアントを使用している場合に機能します。私はそうしないので、私はオンラインリファレンスを好む。
Ledhund 2013年

これが最良の答えです
Kolob Canyon

87

名前ごとの表示手順について

select name from mysql.proc 

以下のコードはすべての手順をリストするために使用され、以下のコードはshow procedure statusと同じ結果になります

select * from mysql.proc 

4
これは、特に小さな端末を使用している場合、他のプレゼンテーションよりもはるかにクリーンなプレゼンテーションです。ありがとう。
user1527227 14

私はこの答えをselect db,name,type from mysql.proc where db<>'sys';少し詳細に、そしてビルトインシステムクルフトを少なくするために進化させました。
pbnelson

47

より具体的な方法:

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

4
AND Type = 'PROCEDURE'を使用しなくても機能します
normalUser

33

上記のように、

show procedure status;

実際に手順のリストを表示しますが、サーバー全体の手順をすべて表示ます。

単一のデータベースにあるものだけを表示したい場合は、これを試してください:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

同様に、SHOW FUNCTION STATUS WHERE Db = 'databasename'; 機能を提供します。
デビッドA.グレイ


21

私の好みは次のようなものです:

  1. 機能と手順の両方をリストし、
  2. どっちがどっち?
  3. プロシージャの名前とタイプのみを提供し
  4. 現在の定義者はなく、現在のデータベースで結果をフィルタリングします
  5. 結果を並べ替えます

このスレッドの他の答えから一緒にステッチして、私は結局

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

...結果は次のようになります。

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)

コメントも役に立ちます。
ドルメン


11

すべてのストアドプロシージャを表示します。

SHOW PROCEDURE STATUS;

すべての機能を表示します:

SHOW FUNCTION STATUS;

指定したプロシージャの定義を表示します。

SHOW CREATE PROCEDURE [PROC_NAME];

特定のデータベースのすべての手順を表示します。

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

9

Praveenkumar_Vの投稿のバリエーション:

SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE';
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'FUNCTION';

..そしてこれは、いくつかの家事の後、時間を節約する必要があったためです。

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

自分だけを表示するには:

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

3
列名、テーブル名などを小文字にして、SQLキーワードはすべて大文字にするのが一般的です。
Sagar


5

現在選択されているデータベースのストアプロシージャを一覧表示する場合は、

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

現在選択されているデータベースに基づいてルーチンを一覧表示します

データベース内の関数を一覧表示するために更新されました

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

データベース内のルーチン/ストアプロシージャをリストする

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

データベース内のテーブルをリストするには、

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

データベース内のビューをリストするには、

方法1:

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

方法2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";

1
                           show procedure status;

このコマンドを使用すると、データベース内のすべての手順を確認できます


0

現在のデータベースのプロシージャリストの私のお気に入りのレンダリング:名前、パラメータリスト、コメント

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

関数のリターンを追加します。

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

0

すべてのデータベースのユーザーの手順と機能をリストします

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

使用中のデータベースに対するユーザーの手順と機能をリストします

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

すべての手順に次のクエリを使用します。

select * from sysobjects 
where type='p'
order by crdate desc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.