データベースにおけるストアドプロシージャとカーソルの説明

WI
Wilan
読了時間: 約 4 分
Stored Procedure & Cursor

ストアドプロシージャ

ストアドプロシージャは、SQL文の集まりであり、特定の名前を持つサブプログラムとしてデータベースに保存されます。

ストアドプロシージャが行う処理は、パラメータ入力を受け取り、出力パラメータとして値を呼び出し元に返し、トリガーや他のストアドプロシージャなどのプログラムによって実行されるデータベース上のデータ操作を実行することです。

ストアドプロシージャの使用にはいくつかの利点があります:

  • アプリケーションのパフォーマンスが向上します。作成されたストアドプロシージャは、アプリケーションから送信されまだコンパイルされていないSQL文よりも高速に実行されるためです。
  • データベースとアプリケーション間のネットワークトラフィックが減少します。コンパイルされていないSQLを送信する必要がないためです。
  • すべてのアプリケーションで繰り返し透過的に使用できます。

ただし、ストアドプロシージャの使用にはいくつかの欠点もあります:

  • デバッグができません。
  • サーバーのハードウェア負荷が増加します。
  • 記述が容易ではなく、特定の知識が必要です。

ストアドプロシージャの構文

ストアドプロシージャの構文は以下の通りです:

ストアドプロシージャの記述構文

DELIMITER //

CREATE PROCEDURE nama_procedure()
BEGIN
    query sql
END //

DELIMITER ;

ストアドプロシージャの呼び出し構文

CALL nama_procedure();

ストアドプロシージャの変数宣言構文

DECLARE nama_variable tipedata(panjang) DEFAULT nilai;

パラメータ付きストアドプロシージャの構文

パラメータには3つのモードがあります:

  • IN
    パラメータのデフォルト形式で、ストアドプロシージャ内での変更はパラメータに影響しません。

  • OUT
    パラメータの値を変更し、呼び出し元に返すモードです。

  • INOUT
    INOUT の組み合わせモードです。

パラメータ付きストアドプロシージャの定義構文例

DELIMITER //

CREATE PROCEDURE nama_procedure(
    [mode] [parameter] [tipe_data]
)
BEGIN
    query sql
END //

DELIMITER ;

パラメータ付きストアドプロシージャの呼び出し構文例

CALL nama_procedure([nilai_parameter]);

カーソル

カーソルは、特定のSQL文の処理を格納するために使用されるデータベースオブジェクトであり、複数の行やレコードを含むクエリ結果を保持する変数とも言えます。

カーソルはテーブルの行数だけ反復処理を行うことができます。カーソルにはいくつかの特性があります:

  • 更新はできません(読み取り専用)。
  • カーソルは一方向にのみ進みます(非スクロール可能)。
  • カーソルが参照するテーブルの更新は推奨されません。意図しない結果を招く可能性があるためです(非感応型)。

カーソルの構文

カーソルの作成にはいくつかの段階があります:

1. 宣言

カーソルを宣言する段階で、構文は以下の通りです:

DECLARE nama_cursor CURSOR FOR
pernyataan_SELECT;

2. オープン

カーソルを開く(アクティブにする)段階で、構文は以下の通りです:

OPEN nama_cursor;

3. フェッチ

カーソルからデータを取得し、変数に格納する段階で、構文は以下の通りです:

FETCH nama_cursor INTO daftar_variabel;

4. クローズ

カーソルを非アクティブにする段階で、構文は以下の通りです:

CLOSE nama_cursor;

ストアドプロシージャとカーソルの違い

ストアドプロシージャとカーソルの違いは、ストアドプロシージャがMySQLの宣言文のみを保持するのに対し、カーソルはクエリ結果を保持すると同時に、その結果に対するポインタとして機能することです。

これにより、カーソルはストアドプロシージャでは実行できない複雑な命令を実行できます。その一つがレコードの反復処理です。

W

著者

Wilan

バリ・アイランド・テクノの常駐寄稿者であり、テクノロジー、プログラミング、ソフトウェアエンジニアリングの世界に関する知識を積極的に共有しています。

ホームに戻る 最終更新日: 2026年6月5日