MySQL ストアド プロシージャ 1. ストアドプロシージャ構文(フォーマット)を作成する 区切り文字 $ CREATE PROCEDURE ストアド プロシージャ名 A (IN 受信パラメータ名 a INT、IN 受信パラメータ名 b VARCHAR(20)、OUT 戻りパラメータ名 c INT) 始める コンテンツ.......... 終了 $ 分析:
2. ストアドプロシージャの特定の構文とロジック A. 変数構文を定義します。 変数名パラメータ型(INT、VARCHAR(20)、BOOLEAN、.....)を宣言します[DEFAULT NULL]; 注: パラメータ タイプの後に DEFAULT NULL を追加して初期値を設定できます。 B. 変数の割り当て: 方法1(変数に直接値を割り当てる): 定義された変数 a を NEW() に設定します。 方法 2 (SQL クエリの結果が変数に直接割り当てられる): `student`.age を INTO 定義済み変数 a から `student` に選択し、 WHERE を実行します........... 方法 3 (SQL クエリの結果を複数の変数に直接割り当てる): `student`.name AS 定義済み変数 a、`student`.age AS 定義済み変数 b を INTO 定義済み変数 a、定義済み変数 b から `student` に選択します ............... c. 論理的推論: #IF判断: IF条件文 (3>5) THEN 条件が TRUE の場合に実行します.........; 終了の場合; #IF ELSE 判定: 条件 (a>0) の場合 条件が (a>0) の場合に実行します.......; それ以外の場合、条件 (a<0) の場合 条件が (a<0) の場合に実行します.......; それ以外 その他の処刑…… 終了の場合; D. カーソル、(LOOP) ループ: #例。単一カーソル ループ: create procedure my_procedure() -- ストアド プロシージャを作成する begin -- ストアド プロシージャを開始する define my_id varchar(32); -- カスタム変数 1 declare my_name varchar(50); -- カスタム変数 2 DECLARE done INT DEFAULT FALSE; -- カスタム制御カーソル ループ変数、デフォルトは false DECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); -- カーソルを定義し、結果セットを入力します。DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 制御変数をカーソルにバインドすると、カーソル ループは自動的に true になります。 OPEN cur; -- カーソルを開きます posLoop: LOOP -- ループ本体を開始します。myLoop はカスタム ループ名です。FETCH cur into my_id, my_name を使用してループを終了します。 -- カーソルによって読み取られた現在の行のデータ シーケンスをカスタム変数 12 に割り当てます。 IF done THEN -- ループを続行するかどうかを決定します LEAVE posLoop; -- ループを終了します END IF; -- 必要な操作を行うには、SQL でカスタム変数を直接使用できます。 UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右のスペースを削除します。 COMMIT; -- トランザクションをコミットします。 END LOOP posLoop; -- カスタム ループを終了します。 CLOSE cur; -- カーソルを閉じます。 END; -- ストアド プロシージャを終了します。 #例。マルチカーソル ループ: create procedure my_procedure() -- ストアド プロシージャを作成する begin -- ストアド プロシージャを開始する define my_id varchar(32); -- カスタム変数 1 declare my_name varchar(50); -- カスタム変数 2 DECLARE done INT DEFAULT FALSE; -- カスタム制御カーソル ループ変数、デフォルトは false DECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- カーソルを定義し、結果セットを入力します。 DECLARE cur_2 CURSOR FOR ( SELECT id_2, name_2 FROM t_people_2 ); -- カーソルを定義し、結果セットを入力します。 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 制御変数をカーソルにバインドすると、カーソル ループは終了時に自動的に true になります。 OPEN cur_1; -- カーソルを開きます posLoop: LOOP -- ループ本体を開始します。myLoop はカスタム ループ名です。FETCH cur_1 into my_id, my_name を使用してループを終了します。 -- カーソルによって読み取られた現在の行のデータ シーケンスをカスタム変数 12 に割り当てます。 IF done THEN -- ループを続行するかどうかを決定します LEAVE posLoop; -- ループを終了します END IF; -- 必要な操作を行うには、SQL でカスタム変数を使用するだけです。 UPDATE ..........; -- 実行したい特定の操作 END LOOP posLoop; -- カスタム ループ本体を終了します。 CLOSE cur_1; -- カーソルを閉じます。 SET done = FALSE; -- 最初のカーソルがトラバースされると、その値はハンドラーによって TRUE に設定されます。 set を使用して FALSE に設定しないと、2 番目のカーソルはトラバースしません。 (カーソルを実際に移動できることを確認するために、カーソルを開く各操作の前にこのステートメントを使用するのが最適です) OPEN cur_2; -- カーソル posLoop_2 を開きます: LOOP -- ループ本体を開始します。myLoop はカスタム ループ名です。FETCH cur_2 into my_id, my_name を使用してループを終了します。 -- カーソルによって読み取られた現在の行のデータ シーケンスをカスタム変数 12 に割り当てます。 IF done THEN -- ループを続行するかどうかを決定します LEAVE posLoop_2; -- ループを終了します END IF; -- 必要な操作を行うには、SQL でカスタム変数を直接使用できます INSERT ..........; -- 実行したい特定の操作 END LOOP posLoop_2; -- カスタム ループ本体を終了します CLOSE cur_2; -- カーソルを閉じます END; -- ストアド プロシージャを終了します 3. ストアドプロシージャの呼び出し #戻り値のないストアド プロシージャを呼び出します CALL ストアド プロシージャ名 (パラメーター.....); #戻り値を持つストアド プロシージャを呼び出す (戻り値を取得する) ストアドプロシージャ名 (@aaa); を呼び出します。 @aaa を選択します。 4. ストアドプロシージャを削除する DROP PROCEDURE ストアド プロシージャ名; 5. 注意事項 ストアド プロシージャ内のセミコロン (;) は非常に重要なので省略しないでください。 以下もご興味があるかもしれません:
|
<<: VMware Workstation での VMware vSphere のセットアップ (グラフィック チュートリアル)
純粋な CSS を使用して、マウスが行の上を通過するときに行の背景色を変更し、その行にフォーカスがあ...
以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...
目次複数の種類のフィルタリングをサポート複数の範囲のクエリを避ける並べ替えを最適化するインデックスの...
この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...
1 MySQLをダウンロードするダウンロードアドレス: http://downloads.mysq...
背景すべての会社の Web サイトは HTTPS プロトコルをサポートする必要があります。Aliba...
フロントエンドテクノロジー層 (写真は少し極端ですが、参考までに) Javascript と DOM...
Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な展開、コンテナ ...
目次1. コンポーネントの構成2. コンポーネント名2.1 コンポーネントの命名3. グローバル登録...
1. コマンドの紹介nl (行数) は指定されたファイルに行番号を追加し、標準出力に書き込みます。フ...
1. データベースにログインするには、rootユーザーを使用することをお勧めします。 mysql -...
目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...
目次概要コンポーネント間でデータを共有する方法Vuex の原則の紹介Vuexはコンポーネントのグロー...
目次1. コンテナライフサイクル管理(1)ドッカー実行(2)スタート/ストップ/リスタート(3)ドッ...
当社には、外部ネットワークからの干渉を受けることが多いサーバーが多数あります。侵入者はポート 338...