MySQLのフロー制御構造

制御構造#フロー
/ *
シーケンス、分岐鎖状、環状、

* /

#分岐構造
#1 1.If機能は、
/ *
構文:IF(条件値1、値2)
機能:デュアルブランチ
アプリケーションまたは外端を開始します

* /

#1 2.case構造
/ *
構文:
ケース1:アナロジースイッチで
ケース変数または式
値1、文1;
値2、文2;
...
N- else文を、
エンド

ケース2:
ケース
、条件1の文1;
場合は、条件2、文2;
...
else文N-;
エンド

アプリケーションの終了を開始するか、外


* /

#の3.Ifは構造

/ *
構文は次のとおりです。
その後、条件1の文1場合は、
その後、ELSEIF条件2の文2;
....
N-へelse文;
END IF;
機能:複数の類似している場合

開始エンドにのみに適用することができます

* /

ケース#1:> 60のスコアは、C、そうでなければDを返す場合> 80スコアは、Bに戻った場合、> 90スコアは、Aに戻った場合、通過成績を達成するために関数を作成します

FUNCTIONのtest_ifをCREATE(FLOATスコア)CHARがRETURNS
BEGIN
DECLARE chをCHARのDEFAULT 'A'が、
スコア> 90 THEN SET CH = 'A' IF。
ELSEIFスコアが> 80 THEN SET CH = 'B';
ELSEIFスコアが> 60 THEN SET CH = 'C'。
ELSE CH = 'D'を設定。
END IF;
RETURNのCH;


ENDの$

SELECT test_if(87)$

ケース#2:給与<2000、その後、削除、もし5000>賃金> 2000年、1000年賃金上昇が、それ以外の場合は500を上げた場合、ストアドプロシージャを作成します。


(SAL DOUBLE IN)PROCEDURE test_if_proをCREATE
BEGIN
SAL <2000 THEN employees.salary = SAL従業員からの削除した場合。
ELSEIF SAL> = 2000およびSal <5000 THEN UPDATEの従業員が給料=給与+ 1000年employees.`salary` = SALを設定します。
ELSE UPDATEの従業員は給与=給与+ 500 employees.`salary` = SALを設定します。
END IF;

ENDの$

$(2100)test_if_pro CALL

ケース#1:> 60のスコアは、C、そうでなければDを返す場合> 80スコアは、Bに戻った場合、> 90スコアは、Aに戻った場合、通過成績を達成するために関数を作成します

FUNCTIONのtest_caseをCREATE(FLOATスコア)CHARがRETURNS
BEGIN
DECLARE chをCHARのDEFAULT 'A'が、

CASE
WHENスコア> 90 THEN SET CH = 'A';
> 80のスコアは次いで、CH =「B」に設定すると、
> 60のスコアは次いで、CH =「C」を設定すると、
ELSE CH = 'D'を設定。
エンドケース。

RETURNのCH;
ENDの$

SELECT test_case(56)$

 

#第二に、ループ構造
/ *
分類:
しばらく、ループ、REPEAT

ループ制御:

次に進み、引き続き、このサイクルの終わりを継続するために同様の反復
休暇似て休憩、ジャンプ、ループ電流の終わり

* /

#1 1.while
/ *

構文:

[レーベル:]条件は、ループしながら行う
ループ;
終了タグ[中];

レノボ:

一方、(ループ条件){

ループ本体;
}

* /

#2.loop
/ *

構文:
[ラベル:]ループ
ループ;
エンドループ[ラベル];

単純な無限ループをシミュレートするために使用することができます

 

* /

3.repeat#
/ *
構文:
[ラベル:]リピート
ループ本体と、
ループ条件の端まで
終了リピート[ラベル]。


* /

#1にはループ制御文加えなかっ
#ケース:記録の挿入管理テーブルの複数の数に応じて、一括挿入を
$ pro_while1のDROP PROCEDURE
プロシージャpro_while1(IN insertCount INT)を作成する
BEGIN
DEFAULT 1 DECLARE I INT;
WHILE I <= insertCount DOを
INSERTをADMIN INTO(ユーザ名、 `password`)VALUES(CONCAT( 'ローズ'、I)、 '666');
SETは、I = I + 1を;
END WHILE;

ENDの$

CALL pro_while1(100)$


/ *

int型I = 1;
一方、(I <= insertcount){

//挿入

私は++します;

}

* /


LEAVE文を追加する#2。

#ケース:数に応じて、管理テーブルの複数のレコードを挿入一括挿入、数> 20の停止した場合
TABLE管理者が$ TRUNCATE
$ test_while1のDROP PROCEDURE
、CREATE PROCEDUREのtest_while1(IN insertCount INTを)
BEGIN
DECLARE I INT DEFAULTを1;。
:WHILE I <= DO insertCount
INSERT ADMIN INTO(ユーザ名、 `password`)VALUES(CONCAT( 'xiaohua'、I)、 '0000');
IF I> = 20 THEN LEAVEあり;
END IF;
私は= I + 1を設定する;
END WHILE;
ENDの$


CALL test_while1(100)$


#3。は、反復ステートメントを追加します。

#ケース:一括挿入、挿入されただけで偶数の数に基づいて、レコードの管理テーブルの複数に挿入され
たTRUNCATE TABLEの管理者は、$
$ test_while1のDROP PROCEDURE
CREATE PROCEDUREをtest_while1(IN insertCount INTを)
BEGIN
DECLAREをI INT DEFAULT 0;
:WHILE I <= DO insertCount
SET I = I + 1;。
!IF MOD(私は、2)0 THEN ITERATE Aを=;
END IF;

INSERT INTOのADMIN(ユーザー名、 `password`)VALUES(CONCAT( 'xiaohua'、I)、 '0000' );

END WHILE A;
ENDの$


CALL test_while1(100)$

/ *

int型私= 0;
一方、(I <= insertCount){
I ++。
(I%2 == 0){もし
続けます。
}
插入

}

* /

 

おすすめ

転載: www.cnblogs.com/Diyo/p/11364675.html