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はショッピングカートの加算と減算、価格計算を実装します

推薦する

div の水平レイアウトを両側に揃える 3 つの方法

この記事では、主に、div の水平レイアウトの両側の配置を実装する 3 つの方法を紹介し、それらを共...

Webpack ファイル パッケージ化エラー例外

webpack をパッケージ化する前に、次の作業が完了していることを確認する必要があります。 1) ...

複雑なウェブサイトのナビゲーションを簡素化

<br />ナビゲーション設計は構造設計における主要なタスクの 1 つです。ソフトウェア...

Vue.js の計算プロパティ、監視プロパティ、ライフサイクルの詳細な説明

目次序文計算されたプロパティ計算プロパティの紹介入門ケース統計価格事例ゲッターメソッドとセッターメソ...

Vue+Elementでページング効果を実現

この記事の例では、ページング効果を実現するためのvue+Elementの具体的なコードを参考までに共...

システム外のフォント参照とトランジション効果

コードをコピーコードは次のとおりです。 <span style="font-fami...

ウェブページのコピー防止機能の実装方法(クラッキング手法付き)

ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...

変換を使用して純粋な CSS ポップアップ メニューを実装するためのサンプル コード

序文トップメニューを作成する場合、ポップアップのセカンダリメニューを作成する必要があります。 以前の...

Vue の新しいパートナー TypeScript クイックスタート実践記録

目次1. 公式の足場を使って構築する2. プロジェクトディレクトリ分析3. TypeScript の...

ウェブページをデザインする際に注意すべきいくつかの問題

Web デザインは、個人の好みや Web ページの内容に応じて、デザインのレイアウトが常に変化します...

マークアップ言語 - 画像の置き換え

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

JSX を使用してカルーセル コンポーネントを実装する方法 (フロントエンドのコンポーネント化)

JSX を使用してコンポーネント システムを構築する前に、例を使用してコンポーネントの実装原理とロ...

Linux システムによって報告される tcp_mark_head_lost エラーの処理方法

問題の説明最近、ホストから次のカーネル情報が報告されました。 7月8日 10:47:42 cztes...

Vueはechartsに基づいて3次元の縦棒グラフを実装します

3次元縦棒グラフは、正面、右側、上部の3つの部分で構成されています。描画するときは、正面をグラフィッ...

Reactの状態管理の3つのルールのまとめ

目次序文No.1 焦点No.2 複雑な状態ロジックの抽出No.3 複数状態操作の抽出要約する序文Re...