Declaraciones de control de flujo de base de datos

1. Bloqueo de declaración, comentario y marca de fin del comando de reinicio

Bloque de declaración

EMPEZAR

     Instrucción SQL | bloque de instrucción SQL

FIN

Descripción:

Block El bloque de instrucciones BEGIN ... END contiene todas las operaciones de procesamiento del bloque de programa, lo que permite anidar los bloques de instrucciones.

Use El uso del bloque de instrucciones BEGIN ... END solo en MySQL no tiene ningún sentido, solo tiene sentido encapsularlo dentro de procedimientos almacenados, funciones almacenadas, disparadores y otros programas almacenados.

2. Notas

      1) comentario de una sola línea

       Use el símbolo "##" como comentario para un enunciado de una sola línea y escríbalo en el lado de la línea o del enunciado que debe comentarse .

       [Ejemplo 3-24] Ejemplos.

        ## Tome el máximo de dos números

       SET @ x = 5, @ y = 6;      ## Define dos variables y asigna valores

       SELECCIONE SI (@x> @ y, @ x, @ y) valor máximo; 

      2) comentarios de varias líneas

       Use / * y * / para encerrar múltiples líneas de declaraciones de comentarios.

 3. Restablecer marcador final del comando

     Símbolo DELIMITER

   【Descripción】

   (1) El símbolo puede ser algunos símbolos especiales, como dos "#", dos "@", dos "$" y dos "%". Pero evite usar el carácter de barra diagonal inversa "/", porque es el carácter de escape de MySQL.

   (2) Para reanudar el uso del punto y coma como marcador final, ejecute el comando DELIMITER;

En segundo lugar, la función de almacenamiento.

1. La creación de funciones almacenadas:

      Nombre de la función CREATE FUNCTION ([nombre del parámetro tipo de datos del parámetro [,…]])

      El tipo de datos del valor devuelto por la función RETURNS

      EMPEZAR

      Cuerpo de la función ;

      Declaración de retorno;

      FIN

       Nota: con delimitador para caracterizar el principio y el final

2. Llame a la función almacenada

        SELECCIONE el nombre de la función ([valor del parámetro [,…]])

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. Eliminar la función almacenada

      Nombre de la función DROP FUNCTION;

      Nota: No agregue paréntesis después del nombre de la función.

Tres, sentencia condicional

1. Uso de variables en el programa.

    1) Declarar variables

DECLARAR nombre de variable local [, nombre de variable local, ...] tipo de datos [valor predeterminado POR DEFECTO];

    2) Asignar valores a las variables

SET nombre de variable local = expresión 1

         [, Nombre de la variable local = expresión 2, ...];

2) Declaración IF

     1) Forma uno

SI <条件> ENTONCES

      Instrucción SQL bloque 1;

[MÁS

      Instrucción SQL bloque 2;]

TERMINARA SI;

Suplemento: el problema se produce aquí: esta función no tiene DETERMINISTIC, NO SQL o READS SQL DATA en su

La solución a este error al crear una función en MySQL: set global log_bin_trust_function_creators = TRUE;

Ejemplo: determinar si es un año bisiesto
 

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) Formulario 2

SI <条件 1> ENTONCES

     Instrucción SQL bloque 1;

ELSEIF <条件 2> LUEGO

     Instrucción SQL bloque 2;

   ......

MÁS

     Bloque de instrucciones SQL n;

TERMINARA SI;

3) Declaración CASO

1) Forma uno

CASO <expresión>

   CUANDO <valor de expresión 1> ENTONCES instrucción SQL bloque 1;

   CUANDO <valor de expresión 2> ENTONCES instrucción SQL bloque 2;

   ......

   CUANDO <valor de expresión n> ENTONCES bloque de instrucciones SQL n;

  [ELSE bloque de instrucciones SQL n + 1;]

FIN;

[Ejemplo 3-32] Juzgar el nombre y el título de los primeros 3 registros en la tabla emp.

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


 2) Formulario 2

 CASO

  CUANDO <condición 1> ENTONCES bloque de instrucción SQL 1;

  CUANDO <condición 2> ENTONCES bloque de instrucción SQL 2;

  ......

  CUANDO <condición n> ENTONCES bloque de instrucciones SQL n;

  ELSE bloque de instrucciones SQL n + 1;

FIN;

[Ejemplo 3-33] La sentencia muestra el nombre ename, sal salarial básica y grado salarial de los primeros tres registros de la tabla emp.

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;

Cuatro, declaración de bucle

1) Ciclo de bucle

 Etiqueta: LOOP

  Bloque de instrucciones SQL;

  IF <expresión condicional> ENTONCES

    DEJA la etiqueta;

  TERMINARA SI;

       END LOOP;

[Ejemplo 3-34] Ejemplo de declaración de bucle LOOP. Cree una función de almacenamiento sum_fn () que devuelva la suma de 1 ~ n.

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) MIENTRAS ciclo

MIENTRAS <expresión condicional> DO

    Bloque de instrucciones SQL;

FINAL MIENTRAS;

[Ejemplo 3-35] WHILE ejemplo de declaración de bucle. Cree una función de almacenamiento sum_fn () que devuelva la suma de 1 ~ n.

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) REPETIR ciclo

REPETIR

     Bloque de instrucciones SQL;

     UNTILE <expresión condicional>

REPETICIÓN FINAL;

[Ejemplo 3-36] Ejemplo de declaración de bucle REPEAT. Cree una función de almacenamiento sum_fn () que devuelva la suma de 1 ~ n .

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);

 

Publicado 75 artículos originales · elogiados 164 · 110,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_41679818/article/details/105634797
Recomendado
Clasificación