MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
A.4.1. | MySQL 8.0 はストアドプロシージャーおよびストアドファンクションをサポートしていますか。 |
はい。 MySQL 8.0 は、ストアドプロシージャーとストアドファンクションの 2 種類のストアドルーチンをサポートしています。 | |
A.4.2. | MySQL のストアドプロシージャーおよびストアドファンクションについてのドキュメントはどこにありますか。 |
セクション25.2「ストアドルーチンの使用」を参照してください。 | |
A.4.3. | MySQL のストアドプロシージャーのディスカッションフォーラムはありますか。 |
はい。 https://forums.mysql.com/list.php?98 を参照してください。 | |
A.4.4. | ストアドプロシージャーの ANSI SQL 2003 仕様はどこにありますか。 |
残念ながら、正式な仕様は無料では入手できません (ANSI は有料で販売しています)。 ただし、「SQL-99 完全、本当に」 by Peter Gulutzan や Trudy Pelzer など、ストアドプロシージャの適用範囲を含む標準の包括的な概要を提供する書籍があります。 | |
A.4.5. | ストアドルーチンを管理するにはどうすればよいですか。 |
ストアドルーチンに明快な命名スキームを使用することはよい管理方法です。
ストアドプロシージャーは、 | |
A.4.6. | 特定のデータベースのすべてのストアドプロシージャーおよびストアドファンクションを表示する方法はありますか。 |
はい。 SELECT ROUTINE_TYPE, ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA=' 詳細は、セクション26.30「INFORMATION_SCHEMA ROUTINES テーブル」を参照してください。
ストアドルーチンの本体は、 | |
A.4.7. | ストアドプロシージャーはどこに格納されますか。 |
ストアドプロシージャは、データディクショナリの一部である
| |
A.4.8. | ストアドプロシージャーまたはストアドファンクションをパッケージにグループ化することはできますか。 |
いいえ。これは MySQL 8.0 ではサポートされません。 | |
A.4.9. | ストアドプロシージャーは別のストアドプロシージャーを呼び出すことができますか。 |
はい。 | |
A.4.10. | ストアドプロシージャーはトリガーを呼び出すことができますか。 |
ストアドプロシージャーでは、トリガーが実行される
| |
A.4.11. | ストアドプロシージャーはテーブルにアクセスできますか。 |
はい。 ストアドプロシージャーは、必要に応じて 1 つ以上のテーブルにアクセスできます。 | |
A.4.12. | ストアドプロシージャーには、アプリケーションエラーを発生させるステートメントはありますか。 |
はい。 MySQL 8.0 には、SQL 標準の
| |
A.4.13. | ストアドプロシージャーには例外処理はありますか。 |
MySQL には、SQL 標準に従った
| |
A.4.14. | MySQL 8.0 のストアドルーチンは結果セットを返すことができますか。 |
ストアドプロシージャーは返すことができますが、ストアドファンクションは返すことができません。
ストアドプロシージャー内で通常の
| |
A.4.15. |
ストアドプロシージャーで |
MySQL 8.0 にはありません。 | |
A.4.16. |
|
MySQL 8.0 には同等の機能はありません。 | |
A.4.17. | ストアドプロシージャーに入力として配列を渡すことはできますか。 |
MySQL 8.0 にはありません。 | |
A.4.18. |
ストアドプロシージャーに |
MySQL 8.0 では、カーソルはストアドプロシージャーの内部でのみ使用できます。 | |
A.4.19. |
ストアドプロシージャーの |
MySQL 8.0
では、カーソルはストアドプロシージャーの内部でのみ使用できます。
ただし、 | |
A.4.20. | デバッグのために、ストアドルーチン内の変数の値を出力できますか。 |
はい。これは、ストアドプロシージャーでは行うことができますが、ストアドファンクションでは行うことはできません。
ストアドプロシージャー内で通常の
| |
A.4.21. | ストアドプロシージャー内でトランザクションをコミットまたはロールバックできますか。 |
はい。 ただし、ストアドファンクション内でトランザクション操作を実行することはできません。 | |
A.4.22. | MySQL 8.0 のストアドプロシージャーおよびストアドファンクションはレプリケーションで動作しますか。 |
はい。ストアドプロシージャおよびファンクションで実行される標準アクションは、レプリケーションソースサーバーからレプリカにレプリケートされます。 セクション25.7「ストアドプログラムバイナリロギング」で詳しく説明されているいくつかの制限があります。 | |
A.4.23. | レプリケーションソースサーバー上に作成されたストアドプロシージャーおよびストアドファンクションはレプリカにレプリケートされますか。 |
はい。オブジェクトが両方のサーバーに存在するように、レプリケーションソースサーバーで通常の
DDL
ステートメントを介して実行されるストアドプロシージャおよびファンクションの作成はレプリカにレプリケートされます。
ストアドプロシージャーおよびストアドファンクションに対する
| |
A.4.24. | ストアドプロシージャーおよびストアドファンクション内で実行されたアクションはどのようにレプリケートされますか。 |
MySQL は、ストアドプロシージャで発生した各 DML イベントを記録し、それらの個々のアクションをレプリカにレプリケートします。 ストアドプロシージャーを実行するために行われた実際の呼び出しはレプリケートされません。 データを変更するストアドファンクションは、各ファンクション内で行われた DML イベントとしてではなく、関数呼び出しとしてログ記録されます。 | |
A.4.25. | レプリケーションでストアドプロシージャーおよびストアドファンクションを使用するための特別なセキュリティー要件はありますか。 |
はい。 レプリカにはソースバイナリログから読み取られたステートメントを実行する権限があるため、レプリケーションでストアドファンクションを使用するための特別なセキュリティー制約が存在します。 レプリケーションまたは一般のバイナリロギング (ポイントインタイムリカバリのための) がアクティブである場合、MySQL の DBA には選択できるセキュリティーオプションが 2 つあります。
| |
A.4.26. | ストアドプロシージャーおよびストアドファンクションのアクションをレプリケートする場合の制限は何ですか。 |
ストアドプロシージャーに埋め込まれている決定性のない
(ランダムな)
アクションまたは時間ベースのアクションは、正しくレプリケートされないことがあります。
その性質上、ランダムに生成された結果は予測できず、正確には再現できません。したがって、レプリカにレプリケートされたランダムなアクションは、ソースで実行されたものを反映しません。
ストアドファンクションを
また、ストアドプロシージャでのアクションのタイミングはレプリケーションに使用されるバイナリログを介して再現できないため、レプリカでは時間ベースのアクションを再現できません。 バイナリログには、DML イベントのみが記録され、タイミング制約は含まれていません。
最後に、大規模な DML アクション
(一括挿入など)
中にエラーが発生した非トランザクションテーブルでは、ソースが
DML
アクティビティから部分的に更新される可能性があるというレプリケーションの問題が発生する可能性がありますが、エラーが発生したためレプリカは更新されません。
回避策として、 | |
A.4.27. | 前述の制限は、MySQL が point-in-tim |
レプリケーションに影響する制限が、ポイントインタイムリカバリに同様に影響します。 | |
A.4.28. | 前述の制限を修正するために何が行われていますか。 |
ステートメントベースのレプリケーションまたは行ベースのレプリケーションのいずれかを選択できます。 元のレプリケーションの実装は、ステートメントベースのバイナリロギングに基づいています。 行ベースのバイナリロギングによって、前述の制限が解決されます。
複合レプリケーションも使用できます
( 追加情報については、セクション17.2.1「レプリケーション形式」を参照してください。 |