データベースフロー制御ステートメント

1. ステートメントブロック、コメント、リセットコマンドの終了マーク

ステートメントブロック

ベギン

     SQLステートメント| SQLステートメントブロック

終わり

説明:

①BEGIN ... ENDステートメントブロックには、プログラムブロックのすべての処理操作が含まれ、ステートメントブロックをネストすることができます。

②MySQLだけでBEGIN ... ENDステートメントブロックを使用しても意味がなく、ストアドプロシージャ、ストアドファンクション、トリガー、その他のストアドプログラム内にカプセル化するだけで意味があります。

2.注意事項

      1)単一行コメント

       「##」記号を単一行ステートメントのコメントとして使用し、コメントを付ける必要がある行またはステートメント側にそれを書き込みます

       [例3-24]例。

        ##最大2つの数値を取る

       SET @ x = 5、@ y = 6;      ## 2つの変数を定義して値を割り当てる

       SELECT IF(@x> @ y、@ x、@ y)最大値; 

      2)複数行コメント

       / *および* /を使用して、コメント文の複数行を囲みます。

 3.コマンド終了マーカーをリセットする

     区切り記号

   【説明】

   (1)記号は、2つの「#」、2つの「@」、2つの「$」、2つの「%」などの特別な記号にすることができます。ただし、バックスラッシュ「/」文字はMySQLのエスケープ文字であるため、使用しないでください。

   (2)セミコロンを終了マーカーとして使用を再開するには、DELIMITER;コマンドを実行します。

第二に、ストレージ機能

1.ストアド関数の作成:

      CREATE FUNCTION関数名([パラメーター名パラメーターデータ型[、…]])

      RETURNS関数によって返される値のデータ型

      ベギン

      関数本体;

      RETURNステートメント。

      終わり

       注:開始と終了を特徴付ける区切り文字付き

2. ストアド関数を呼び出す

        SELECT関数名([パラメータ値[、…]])

DELIMITER @@
CREATE FUNCTION name_f1(dno DECIMAL(2))
RETURNS  VARCHAR(14)
BEGIN
  RETURN(SELECT dname FROM dept
    WHERE deptno=dno);  
 END@@

DELIMITER;
SELECT name_f1(20);

3.ストアド関数を削除します

      DROP FUNCTION関数名。

      注:関数名の後に括弧を追加しないでください。

3、条件付き判断ステートメント

1.プログラムでの変数の使用

    1)変数を宣言する

DECLAREローカル変数名[、ローカル変数名、...]データ型[デフォルトのデフォルト値];

    2)変数に値を割り当てる

SETローカル変数名=式1

         [、ローカル変数名=式2、...];

2。IFステートメント

     1)フォーム1

IF <条件> THEN

      SQLステートメントブロック1;

[そうしないと

      SQLステートメントブロック2;]

終了IF;

補足:ここに問題があります:この関数には、DETERMINISTIC、NO SQL、READS SQL DATAのいずれも含まれていません

MySQLで関数を作成する際のこのエラーの解決策:set global log_bin_trust_function_creators = TRUE;

例:うるう年かどうかを判断する
 

DELIMITER @@  
DROP FUNCTION IF EXISTS leap_year@@  
CREATE FUNCTION leap_year(a int)
RETURNS VARCHAR(255)
 BEGIN 
  IF((a%4=0 AND a%100<>0)OR a%400=0) THEN 
       RETURN '是闰年';
    ELSE 
       RETURN '不是闰年';
    END IF;
 END@@
DELIMITER;
SELECT  leap_year(2001);

2)フォーム2

IF <条件1> THEN

     SQLステートメントブロック1;

ELSEIF <条件2>次に

     SQLステートメントブロック2;

   ……

そうしないと

     SQLステートメントブロックn;

終了IF;

3。CASEステートメント

1)フォーム1

CASE <式>

   WHEN <式の値1> THEN SQLステートメントブロック1;

   WHEN <式の値2> THEN SQLステートメントブロック2;

   ……

   WHEN <式の値n> THEN SQLステートメントブロックn;

  [ELSE SQLステートメントブロックn + 1;]

終わり;

[例3-32] empテーブルの最初の3つのレコードの名前とタイトルを判断する。

SELECT  ename 姓名,CASE Job
   WHEN '测试' THEN '工程师'
   WHEN '设计'    THEN '设计总监'
   ELSE '经理'
  END AS 职务
 FROM emp  LIMIT 3;


 2)フォーム2

 場合

  WHEN <条件1> THEN SQLステートメントブロック1;

  WHEN <条件2> THEN SQLステートメントブロック2;

  ……

  WHEN <条件n> THEN SQLステートメントブロックn;

  ELSE SQLステートメントブロックn + 1;

終わり;

[例3-33]判決は、empテーブルの最初の3つのレコードの名前ename、基本給sal、および給与等級を表示します。

SELECT ename,sal,CASE
   WHEN  sal BETWEEN 700 AND 1200 THEN '一级'
   WHEN  sal BETWEEN 1201 AND 1400 THEN '二级'
   WHEN  sal BETWEEN 1401 AND 2000 THEN '三级'
   WHEN  sal BETWEEN 2001 AND 3000 THEN '四级'
   ELSE  '五级'
  END 工资等级
  FROM  emp   LIMIT  3;

4、ループステートメント

1。ループサイクル

 レーベル:LOOP

  SQLステートメントブロック。

  IF <条件式> THEN

    LEAVEラベル;

  終了IF;

       ループ終了;

【例3-34】LOOPループ文の例。1〜nの合計を返すsum_fn()ストレージ関数を作成します。

DELIMITER @@
DROP FUNCTION IF EXISTS sum_fn@@
CREATE FUNCTION sum_fn(n  int)
RETURNS  INT
BEGIN
 DECLARE s,i INT;
 SET s=0,i=1;
 loop_label: LOOP      
   SET s=s+i;
   SET i=i+1;
   IF  i>n  THEN
     LEAVE loop_label; 
   END IF;
 END LOOP;
 RETURN s;
END@@

DELIMITER ;
SELECT sum_fn(5);

2。WHILEサイクル

WHILE <条件式> DO

    SQLステートメントブロック。

END WHILE;

【例3-35】WHILEループ文の例。1〜nの合計を返すsum_fn()ストレージ関数を作成します。

DELIMITER @@
DROP FUNCTION IF EXISTS sum_fn@@
CREATE FUNCTION sum_fn(n  int)
RETURNS  INT
BEGIN
 DECLARE s,i INT;
 SET s=0,i=1;
 WHILE i<=n DO
  SET s=s+i;
  SET i=i+1;
 END WHILE;
 RETURN s;
END@@
DELIMITER ;
SELECT sum_fn(5);

3。繰り返しサイクル

繰り返す

     SQLステートメントブロック。

     UNTILE <条件式>

END REPEAT;

【例3-36】REPEATループ文の例。1〜nの合計を返すsum_fn()ストレージ関数を作成します

DELIMITER @@
DROP FUNCTION IF EXISTS sum_fn@@
CREATE FUNCTION sum_fn(n  int)
RETURNS  INT
BEGIN
 DECLARE s,i INT;
 SET s=0,i=1;
 REPEAT
  SET s=s+i;
  SET i=i+1;
  UNTIL i>n
 END REPEAT;
 RETURN s;
END@@

DELIMITER ;
SELECT sum_fn(5);

 

元の記事を75件公開 賞賛された164件 表示回数110,000回

おすすめ

転載: blog.csdn.net/qq_41679818/article/details/105634797