MySQL ストアド プロシージャを作成 (CREATE PROCEDURE) して呼び出す (CALL) 方法と、変数を作成 (DECLARE) して割り当てる (SET) 方法

MySQL ストアド プロシージャを作成 (CREATE PROCEDURE) して呼び出す (CALL) 方法と、変数を作成 (DECLARE) して割り当てる (SET) 方法

この記事では、例を使用して、MySQL ストアド プロシージャを作成 (CREATE PROCEDURE) して呼び出す (CALL) 方法と、変数を作成 (DECLARE) して割り当てる (SET) 方法について説明します。ご参考までに、詳細は以下の通りです。

ストアド プロシージャの作成 (CREATE PROCEDURE) と呼び出し (CALL)

ここでは定義や用語については説明しません。例を見てゆっくりと慣れていきましょう。ここで、GetAllProducts() という簡単なストアド プロシージャを作成しましょう。この GetAllProducts() ストアド プロシージャは、主に製品テーブルからすべての製品を選択するために使用されます。 mysql クライアント ツールを起動し、次のコマンドを入力します。

区切り文字 //
 プロシージャ GetAllProducts() を作成する
  始める
  製品から*を選択します。
  終わり //
区切り文字 ;

上記の SQL を詳しく見てみましょう。

  • 最初のコマンドは DELIMITER // ですが、これはストアド プロシージャの構文とは関係ありません。 DELIMITER ステートメントは、標準の区切り文字であるセミコロン (;) を :// に変更します。 この場合、区切り文字はセミコロン (;) から二重スラッシュ // に変更されます。なぜ区切り文字を変更する必要があるのですか? mysql ツールに各ステートメントを 1 つずつ解釈させるのではなく、ストアド プロシージャ全体をサーバーに渡すためです。 END キーワードの後に​​、区切り文字 // を使用してストアド プロシージャの終了を示します。 最後のコマンド (DELIMITER;) は、区切り文字をセミコロン (;) に戻します。
  • 新しいストアド プロシージャを作成するには、CREATE PROCEDURE ステートメントを使用します。 CREATE PROCEDURE ステートメントの後にストアド プロシージャの名前を指定します。この例では、ストアド プロシージャの名前は GetAllProducts であり、ストアド プロシージャの名前の後に括弧が配置されています。
  • BEGIN と END の間の部分は、ストアド プロシージャの本体と呼ばれます。ビジネス ロジックを処理するには、宣言型 SQL ステートメントを本体に配置します。 このストアド プロシージャでは、単純な選択クエリを使用して、製品テーブル内のデータを照会します。

上記の SQL により、ストアド プロシージャが作成されました。完了したら、ストアド プロシージャを呼び出します。呼び出し構文を見てみましょう。

STORED_PROCEDURE_NAME() を呼び出します。

GetAllProducts() ストアド プロシージャを呼び出す特定の SQL を見てみましょう。

GetAllProducts() を呼び出します。

上記の SQL を実行すると、ストアド プロシージャで SQL を実行した結果が表示されます。

変数の作成 (DECLARE) と代入 (SET)

ご存知のとおり、変数は、ストアド プロシージャの実行中に値を変更できる名前付きデータ オブジェクトです。次に、ストアド プロシージャで変数を使用して、直接的/間接的な結果を保存してみます。 これらの変数はストアド プロシージャのローカル変数ですが、変数を使用する前に宣言する必要があることに注意する必要があります。ストアド プロシージャで変数を宣言する場合は、DECLARE ステートメントを使用できます。SQL 構文を見てみましょう。

DECLARE 変数名 データ型(サイズ) DEFAULT デフォルト値;

上記の SQL の意味を見てみましょう。

  • まず、DECLARE キーワードの後に​​変数名を指定します。変数名は、MySQL テーブル列名の命名規則に従う必要があります。
  • 次に、変数のデータ型とサイズを指定します。変数は、INT、VARCHAR、DATETIME などの任意の mysql データ型にすることができます。
  • 最後に、変数が宣言されると、その初期値は NULL になります。ただし、DEFAULT キーワードを使用して変数にデフォルト値を割り当てることができます。

次に、データ型が INT、デフォルト値が 0 の total_sale という変数を宣言します。 SQLを見てみましょう:

total_sale INT DEFAULT 0 を宣言します。

その中でも、MySQL では、単一の DECLARE ステートメントを使用して、同じデータ型を共有する 2 つ以上の変数を宣言できます。SQL を見てみましょう。

x, y INT をデフォルト 0 として宣言します。

上記のSQLでは、2つの整数変数xとyを宣言し、デフォルト値を0に設定しました。変数が設定されたら、値を割り当てます。変数に値を割り当てる場合は、SET ステートメントを使用できます。例を見てみましょう。

total_count INT DEFAULT 0 を宣言します。
合計数を 10 に設定します。

上記の SQL ステートメントでは、total_count 変数に値 10 を割り当てます。 SET ステートメントに加えて、SELECT INTO ステートメントを使用してクエリの結果を変数に割り当てることもできます。例を見てみましょう。

total_products INT DEFAULT 0 を宣言する
 
COUNT(*) を total_products に選択します
製品から

上記の SQL では、次のことを理解する必要があります。

  • まず、total_products という変数を宣言し、その値を 0 に初期化します。
  • 次に、SELECT INTO ステートメントを使用して、データベースの products テーブルから製品の数を選択し、total_products 変数に値を割り当てます。

変数には独自のスコープがあり、それを使用して変数のライフサイクルを定義することがわかっています。 ただし、ストアド プロシージャ内で変数を宣言すると、ストアド プロシージャの END ステートメントに到達したときに変数はスコープ外となり、他のコード ブロックではアクセスできなくなります。

BEGIN END ブロック内で変数を宣言すると、END に到達するとスコープ外になることがわかります。 変数は自身のスコープ内でのみ有効であるため、異なるスコープ内で同じ名前を持つ 2 つ以上の変数を宣言することもできます。 ただし、異なるスコープ内で同じ名前の変数を宣言することは、適切なプログラミング方法ではありません。このうち、@ 記号で始まる変数はセッション変数であり、セッションが終了するまで使用可能でアクセス可能です。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL で 2 つの日付間の連続ログイン日数の最大数を照会する方法
  • MySQL ストアド プロシージャでの変数の定義と割り当て
  • mysqlは連続した日付と変数の割り当てを生成します

<<:  Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

>>:  jsはショッピングカートの加算と減算、価格計算を実装します

推薦する

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

Windows での MySQL 5.7.18 のインストールと設定のチュートリアル

この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...

ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

Linuxシステムの入出力管理とvimの共通機能の詳細な説明

####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...

JavaScript axiosのインストールとパッケージ化のケースの詳細な説明

1. axiosプラグインをダウンロードする cnpm インストール axios -S 2. mai...

ブラウザのURLの前に小さなアイコンを表示する方法

多くのウェブサイトを閲覧すると、ブラウザのアドレスバーの前に小さなアイコンがあり、ブラウザのタブの位...

MySQL のキーとインデックスの違い

まずはコードを見てみましょう: ALTER TABLE reportblockdetail ADD ...

Vueでファジークエリを実装する方法の簡単な例

序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...

Vueカスタム指示により、ポップアップウィンドウのドラッグ4辺ストレッチと対角ストレッチ効果を実現

導入同社の最近の Vue フロントエンド プロジェクトの要件: ポップアップ ウィンドウのドラッグ、...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 2. クロージャの役割2.1) メモリ2.2) プライベート変数...

単一テーブルのMySQLバックアップとリストアに関する簡単な説明

A. MySQLバックアップツールxtrabackupのインストール1. Percona 公式 xt...

Vue3.0 手書きカルーセル効果

この記事では、Vue3.0の手書きカルーセル効果の具体的なコードを参考までに共有します。具体的な内容...

Python で pymysql モジュールを使用して MySQL データベースに接続する

pymysqlをインストールするpip install pymysql 2|0pymysqlの使用2...

JavaScript/TypeScript で同時リクエスト制御を実装するためのサンプルコード

シナリオリクエストが 10 件あるが、同時リクエストの最大数は 5 件で、リクエスト結果が必要である...