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 のセットアップ (グラフィック チュートリアル)
バージョンアップデートにより、元のユーザーのパスワードフィールドがauthentication_st...
Docker 学習https://www.cnblogs.com/poloyy/p/15257059...
1. ボタンで使用される値は、「OK」、「削除」など、ボタンに表示されるテキストを指します。 2. ...
この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...
1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...
導入:現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロ...
今回は、Google Chrome のタブバーのような、特殊な丸い角を持つナビゲーション バーのレイ...
目次# データ準備後# SQLクエリ率テスト# SQL グループレートテスト# sql ソート率テス...
最適化のアイデア最適化には主に 2 つの方向があります。再レンダリングの回数を減らします。 Reac...
問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...
1. 動的パラメータ2.6.0 以降では、角括弧で囲まれた JavaScript 式をディレクティブ...
要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...
1. イメージをプルするdocker pull レジストリ.cn-hangzhou.aliyuncs...
1. はじめに最近、開発者が誤ってデータを削除したり更新したりするケースがよくあります。今回もまた問...
.net 開発に関しては、Microsoft の SQL Server データベースに精通しており、...