MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】特定のデータベースに保存されたストアドファンクションの一覧と詳細情報を確認する方法

MySQLでは、システムテーブル mysql.proc に対してSELECTクエリを実行することで、特定のデータベースに登録されているストアドファンクション(保存された関数)の一覧と、その完全な情報を一度に取得できます。

確認用クエリの基本形

ポイントは、db = 'データベース名' で対象のデータベースを絞り込み、type = 'FUNCTION' を指定して関数のみを抽出することです。縦方向に見やすい出力を得るために、末尾に \G を付けるのがおすすめです。

mysql> Select * from mysql.proc where db = 'query' AND type = 'FUNCTION' \G

実行結果の出力例

上記のクエリを実行すると、該当データベース内の各関数について、次のような詳細情報が1行ずつ返されます。ここでは「query」データベースに登録されている factorial 関数(階乗を計算する関数)の出力例を示します。

*************************** 1. row ***************************
                  db: query
                name: factorial
                type: FUNCTION
       specific_name: factorial
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: YES
      security_type: DEFINER
          param_list: n DECIMAL(3,0)
             returns: decimal(20,0)
                body: BEGIN
DECLARE factorial DECIMAL(20,0) DEFAULT 1;
DECLARE counter DECIMAL(3,0);
SET counter = n;
    factorial_loop: REPEAT
SET factorial = factorial * counter;
SET counter = counter - 1;
UNTIL counter = 1
END REPEAT;
RETURN factorial;
END
             definer: root@localhost
             created: 2021-11-16 14:04:48
            modified: 2021-11-16 14:04:48
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,...
character_set_client: cp850
collation_connection: cp850_general_ci
        db_collation: latin1_swedish_ci

同じデータベースには、引数として受け取った文字列に「Hello, 」を付けて返す Hello 関数(RETURN CONCAT('Hello, ',s,'!'))のように、複数の関数がそれぞれ別の行として出力されます。

出力される主な項目の意味

  • db … 関数が属するデータベース名
  • name / specific_name … 関数の名前
  • type … FUNCTION(関数)または PROCEDURE(プロシージャ)
  • language … 実装言語(通常はSQL)
  • sql_data_access … SQLデータへのアクセス方式(CONTAINS_SQL など)
  • is_deterministic … 同じ入力に対して常に同じ結果を返すかどうか(YES / NO)
  • security_type … 実行権限の種類(DEFINER / INVOKER)
  • param_list … 引数のリストとその型
  • returns … 戻り値のデータ型
  • body … 関数本体の実際のコード
  • definer … 関数を作成したユーザー(例:root@localhost)
  • created / modified … 作成日時と最終更新日時
  • character_set_client など … 作成時の文字セットおよび照合順序

注意点:MySQL 8.0以降の場合

mysql.proc テーブルは MySQL 8.0で廃止されました。新しいバージョンでは、代わりに information_schema.ROUTINES ビューを参照してください。

SELECT * FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'query' AND ROUTINE_TYPE = 'FUNCTION'\G

この方法を使えば、古いバージョンでも新しいバージョンでも、ストアドファンクションの定義内容・作成者・作成日時といった管理に必要な情報を網羅的に把握できます。運用中のMySQLのバージョンに合わせて適切な方を選択しましょう。

  1. MySQLで特定のデータベース内にあるビューのメタデータを確認する方法

    MySQLでは、INFORMATION_SCHEMA データベース内の VIEWS テーブルを参照することで、ビューのメタデータ(ビューに関する定義情報)を確認できます。このテーブルには、ビューの定義内容や作成者、更新可否などの詳細が格納されています。ここでは、「Info」という名前のビューを例に、具体的な確認方法を見ていきましょう。ビューのメタデータを取得するクエリ以下のクエリを実行すると、「query」データベース内の「Info」というビューのメタデータを表示できます。mysql> SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_

  2. PHPでMySQLデータベースの一覧を取得する方法【サンプルコード付き】

    利用可能なMySQLデータベースのリストを取得するには、PHPスクリプトを活用します。ここでは、基本的な取得方法から、現行のPHP環境で推奨される書き方まで、順を追って解説します。 基本的なサンプルコード 以下は、従来の mysql 拡張モジュールを使って、サーバー上の全データベース一覧を取得して表示するシンプルな例です。 <?php     $con = mysql_connect("localhost", "userid", "password");   &n