Instruções de controle de fluxo do banco de dados

1. Bloco de declaração, comentário e marca de comando final

Bloco de instruções

INÍCIO

     Instrução SQL | Bloco de Instrução SQL

FIM

Descrição:

Block O bloco de instruções BEGIN ... END contém todas as operações de processamento do bloco de programa, permitindo que os blocos de instruções sejam aninhados.

② O uso dos blocos de instrução BEGIN ... END apenas no MySQL não faz sentido. Faz sentido encapsulá-los dentro de procedimentos armazenados, como procedimentos armazenados, funções armazenadas e gatilhos.

2. Notas

      1) Comentário de linha única

       Use o símbolo "##" como um comentário para uma instrução de linha única e escreva-a na linha ou no lado da instrução que precisa ser comentada .

       [Exemplo 3-24] Exemplos.

        ## Pegue o máximo de dois números

       SET @ x = 5, @ y = 6;      ## Defina duas variáveis ​​e atribua valores

       SELECT SE (@x> @ y, @ x, @ y) valor máximo; 

      2) Comentários de várias linhas

       Use / * e * / para incluir várias linhas de declarações de comentários.

 3. Redefinir o marcador final do comando

     Símbolo DELIMITER

   【Descrição】

   (1) O símbolo pode ser alguns símbolos especiais, como dois "#", dois "@", dois "$", dois "%" e assim por diante. Mas evite usar o caractere de barra invertida "/", porque é o caractere de escape do MySQL.

   (2) Para continuar usando o ponto e vírgula como marcador final, execute o comando DELIMITER;

Segundo, a função de armazenamento

1. A criação de funções armazenadas:

      Nome da função CREATE FUNCTION ([nome do parâmetro tipo de dados do parâmetro [,…]])

      O tipo de dados do valor retornado pela função RETURNS

      INÍCIO

      Corpo da função ;

      Declaração RETURN;

      FIM

       Nota: com delimitador para caracterizar o começo e o fim

2. Chame a função armazenada

        SELECT nome da função ([valor do 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. Excluir função armazenada

      DROP FUNCTION nome da função;

      Nota: Não adicione parênteses após o nome da função.

Três, declaração de julgamento condicional

1. Uso de variáveis ​​no programa

    1) Declarar variáveis

DECLARAR nome da variável local [, nome da variável local, ...] tipo de dados [valor padrão padrão];

    2) Atribuir valores a variáveis

SET nome da variável local = expressão 1

         [, Nome da variável local = expressão 2, ...];

2) Instrução IF

     1) Forme um

SE <条件> ENTÃO

      Bloco de instruções SQL 1;

[OUTRO

      Bloco 2 da instrução SQL;]

FIM SE;

Suplemento: Há um problema aqui: Esta função não possui DETERMINISTIC, NO SQL ou READS SQL DATA em seus

A solução para este erro ao criar uma função no MySQL: configure global log_bin_trust_function_creators = TRUE;

Exemplo: determinar se é um ano bissexto
 

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) Formulário 2

SE <条件 1> ENTÃO

     Bloco de instruções SQL 1;

ELSEIF <条件 2> ENTÃO

     Bloco 2 da instrução SQL;

   ……

OUTRO

     Bloco de instruções SQL n;

FIM SE;

3) Instrução CASE

1) Forme um

CASE <expressão>

   WHEN <expressão value 1> THEN instrução SQL bloco 1;

   WHEN <expressão valor 2> THEN instrução SQL bloco 2;

   ……

   WHEN <valor da expressão n> THEN SQL statement block n;

  [Bloco de instruções SQL ELSE n + 1;]

FIM;

[Exemplo 3-32] Julgando o nome e o título dos 3 primeiros registros na tabela emp.

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


 2) Formulário 2

 CASO

  WHEN <condição 1> THEN instrução SQL bloco 1;

  WHEN <condição 2> THEN instrução SQL bloco 2;

  ……

  WHEN <condição n> THEN SQL instrução bloco n;

  Bloco de instruções SQL ELSE n + 1;

FIM;

[Exemplo 3-33] O julgamento exibe o nome ename, salário-base salarial e grade salarial dos três primeiros registros da tabela 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;

Declaração de loop quatro

1 Ciclo de loop

 Gravadora: LOOP

  Bloco de instruções SQL;

  IF <expressão condicional> THEN

    Deixar a etiqueta;

  FIM SE;

       END LOOP;

[Exemplo 3-34] Exemplo de instrução de loop LOOP. Crie uma função de armazenamento sum_fn () que retorne a soma 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) ENQUANTO o ciclo

ENQUANTO <expressão condicional> FAZ

    Bloco de instruções SQL;

FIM QUANDO;

[Exemplo 3-35] Exemplo de instrução de loop WHILE. Crie uma função de armazenamento sum_fn () que retorne a soma 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) Ciclo REPEAT

REPETIR

     Bloco de instruções SQL;

     UNTILE <expressão condicional>

REPETIÇÃO FINAL;

[Exemplo 3-36] Exemplo de instrução de loop REPEAT. Crie uma função de armazenamento sum_fn () que retorne a soma 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 artigos originais · elogiado 164 · 110.000 visualizações

Acho que você gosta

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