`
hideto
  • 浏览: 2682760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL存储过程之代码块、条件控制、迭代

阅读更多
1,代码块
代码顺序
1,变量和条件声明
2,Cursor声明
3,Handler声明
4,程序代码

可以给代码块加lebel,这样END匹配比较直观,还可以用LEAVE语句来终结代码块:
[label:] BEGIN
    varaiable and condition declarations
    cursor declarations
    handler declarations

    program code
END [label];

代码块可以嵌套:
CREATE PROCEDURE nested_blocks()
BEGIN
    DECLARE my_variable varchar(20);
    SET my_variable='This value was set in the outer block';
    BEGIN
        SET my_variable='This value was set in the inner block';
    END;
    SELECT my_variable, 'Changes in the inner block are visible in the outer block';
END;

LEAVE的例子:
CREATE PROCEDURE nested_blocks()
outer_block: BEGIN
    DECLARE l_status int;
    SET l_status=1;
    inner_block: BEGIN
        IF (l_status=1) THEN
            LEAVE inner_block;
        END IF;
        SELECT 'This statement will never be executed';
    END inner_block;
    SELECT 'End of program';
END outer_block;


2,条件控制
IF:
IF expression THEN commands
    [ELSEIF expression THEN commands]
    [ELSE commands]
END IF;

例子:
IF (sale_value > 200) THEN
    CALL free_shipping(sale_id);    /*Free shipping*/
    IF (customer_status='PLATINUM') THEN
        CALL apply_discount(sale_id,20); /* 20% discount */
    ELSEIF (customer_status='GOLD') THEN
        CALL apply_discount(sale_id,15); /* 15% discount */
    ELSEIF (customer_status='SILVER') THEN
        CALL apply_discount(sale_id,10); /* 10% discount */
    ELSEIF (customer_status='BRONZE') THEN
        CALL apply_discount(sale_id,5); /* 5% discount*/
    END IF;
END IF;

CASE:
CASE
    WHEN condition THEN
        statements
    [WHEN condition THEN
        statements...]
    [ELSE
        statements]
END CASE;

例子:
CASE
    WHEN (sale_value>200) THEN
        CALL free_shipping(sale_id);
        CASE customer_status
            WHEN 'PLATINUM' THEN
                CALL apply_discount(sale_id,20);
            WHEN 'GOLD' THEN
                CALL apply_discount(sale_id,15);
            WHEN 'SILVER' THEN
                CALL apply_discount(sale_id,10);
            WHEN 'BRONZE' THEN
                CALL apply_discount(sale_id,5);
        END CASE;
END CASE;

CASE与SELECT语句结合的妙用:
SELECT (CASE WHEN (t.a = 1 AND t.b = 0) THEN t.c ELSE 'N/A' END) AS result FROM test t order by result asc


3,迭代
LOOP
[label:] LOOP
    statements
END LOOP [label];

REPEAT...UNTIL
[label:] REPEAT
    statements
UNTIL expression
END REPEAT [label]

WHILE
[label:] WHILE expression DO
    statements
END WHILE [label]

LEAVE语句
SET i=1;
myloop: LOOP
    SET i=i+1;
    IF i=10 then
        LEAVE myloop;
    END IF:
END LOOP myloop;
SELECT 'I can count to 10';

ITERATE语句
SET i=0;
loop1: LOOP
    SET i=i+1;
    IF i>=10 THEN                 /*Last number - exit loop*/
        LEAVE loop1;
    ELSEIF MOD(i, 2)=0 THEN       /*Even number - try again*/
        ITERATE loop1;
    END IF;

    SELECT CONCAT(i, " is an odd number");
END LOOP loop1;

嵌套循环
DECLARE i, j INT DEFAULT 1;
outer_loop: LOOP
    SET j=1;
    inner_loop: LOOP
        SELECT concat(i, " times ", j, " is ", i*j);
        SET j=j+1;
        IF j>12 THEN
            LEAVE inner_loop;
        END IF;
    END LOOP inner_loop;
    SET i=i+1;
    IF i>12 THEN
        LEAVE outer_loop;
    END IF;
END LOOP outer_loop;
分享到:
评论
2 楼 安静听歌 2016-05-18  
希望可以一给一点点注释
1 楼 hyj1254 2011-08-04  
引用
CREATE PROCEDURE nested_blocks()
outer_block: BEGIN
    DECLARE l_status int;
    SET l_status=1;
    inner_block: BEGIN
        IF (l_status=1) THEN
            LEAVE inner_block;
        END IF;
        SELECT 'This statement will never be executed';
    END inner_block;
    SELECT 'End of program';
END outer_block;

大哥,这个在机子上试过没?

相关推荐

    mysql存储过程之代码块条件控制迭代.docx

    总的来说,MySQL存储过程中的代码块、条件控制、迭代以及游标和处理器的使用,共同构建了一个强大的数据库编程环境,能够处理复杂的业务逻辑和数据操作。理解并熟练掌握这些概念,对于提升数据库应用的效率和灵活性...

    MySQL+5.0存储过程

    MySQL存储过程是数据库管理系统中的一种重要特性,尤其在MySQL 5.0版本中,它提供了更加强大和灵活的数据处理能力。存储过程是一组预先编译的SQL语句,可以视为数据库中的函数,用于执行特定任务。它们允许开发人员...

    mysql存储过程之循环语句(WHILE,REPEAT和LOOP)用法分析

    本文实例讲述了mysql存储过程之循环语句(WHILE,REPEAT和LOOP)用法。分享给大家供大家参考,具体如下: MySQL提供循环语句,允许我们根据条件重复执行一个SQL代码块其中有三个循环语句:WHILE,REPEAT和LOOP,我们...

    MySQL存储过程中游标循环的跳出和继续操作示例

    MySQL存储过程是数据库编程的重要组成部分,它允许程序员在数据库中执行一系列复杂的操作,包括处理数据、控制流程等。其中,游标(Cursor)是数据库处理过程中用于遍历查询结果集的一种机制,尤其在循环操作中非常...

    MySQL数据库存取例子代码.zip

    8. **性能优化**:了解索引、JOIN操作、子查询、存储过程等高级概念,可以帮助提升数据库的查询性能。同时,合理设计数据库架构,避免冗余数据,也是优化的重要方面。 这个压缩包中的代码实例将帮助初学者更好地...

    mysql第七章.pdf

    MySQL数据库是当前应用最为广泛的关系型数据库管理系统之一,它支持多种数据类型和存储引擎,同时也提供了丰富的编程接口和复杂的查询语言。在学习MySQL数据库应用与开发时,第七章通常会介绍编程方面的基础知识,...

    窥探mysql存储过程细节

    MySQL存储过程是数据库管理系统提供的一种高级程序设计语言,允许用户在数据库中定义一系列操作,以完成特定的任务。存储过程能够封装复杂的SQL语句,提高代码的重用性,减少网络流量,提高执行效率,同时也增加了...

    MySQL 存储过程和"Cursor"的使用方法

    MySQL存储过程是数据库中一种非常实用的特性,它允许用户定义一组SQL语句,并将其作为一个单元来执行。这种集合操作可以提高效率,减少网络通信,同时使得代码更加模块化和可重复使用。在处理复杂的业务逻辑或需要...

    mysql internal

    - **if语句**:if语句通常包含一个条件表达式和一个或多个代码块,它们由花括号包围。 - **for循环**:for循环用于迭代执行一段代码,它包含初始化、条件检查和更新部分。 - **while循环**:while循环在条件为真时...

    MySQL++使用手册

    - **功能**:MySQL++ 支持异常处理机制,用于捕获执行过程中出现的错误。 - **示例**:通过抛出异常来处理连接失败、查询错误等问题。 #### 三、教程 **3.1 运行示例** - **步骤**:文档提供了运行示例的方法,...

    PHP和MySQL Web开发第4版pdf以及源码

    1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 1.15 通过迭代实现重复动作 1.15.1 while循环 1.15.2 for和foreach循环 1.15.3 do...while循环 1.16 从控制...

    MySQL5常用命令-精通Oracle10g编程.zip

    MySQL是世界上最流行的开源关系型数据库管理系统之一,而Oracle则是一种功能强大的企业级数据库系统,其PL/SQL语言用于编写存储过程和控制流程。 在MySQL5.0常用命令.pdf中,读者可以学习到MySQL的基础操作和管理...

    MySQL_5[1].1中文参考手册

    - **存储过程**:允许用户编写可重复使用的代码块。 - **触发器**:能够在特定事件发生时自动执行代码。 - **全文搜索**:支持全文索引和搜索功能。 - **空间数据类型**:支持地理空间数据存储和查询。 #### 3.3 ...

    VC下操作MySQl数据库

    总之,"VC下操作MySQL数据库"涉及到从安装数据库、配置开发环境到编写代码实现数据交互的全过程。每个环节都需要细心处理,确保所有依赖正确安装,代码逻辑清晰,这样才能在VC中顺利地进行MySQL数据库操作。

    mysql语句大全

    - **CREATE PROCEDURE**:创建存储过程,预编译的SQL代码块,可重复使用并接受参数。 - **DROP PROCEDURE**:删除存储过程。 - **CREATE TRIGGER**:创建触发器,自动执行当满足特定事件(如INSERT, UPDATE, ...

    PHP和MySQL WEB开发(第4版)

    1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 1.15 通过迭代实现重复动作 1.15.1 while循环 1.15.2 for和foreach循环 1.15.3 do...while循环 1.16 从控制结构或脚本中...

    SQL语句大全(mysql,sqlserver,Access,Oracle)

    - **IF-ELSE**: 结构化编程中的条件语句,根据条件执行不同的代码块。 - **CASE**: 用于条件判断的表达式,根据不同的条件返回不同的值。 - **WHILE**: 循环结构,当条件满足时重复执行代码块。 - **CONTINUE**:...

    java连接mysql数据库 增删改查

    `ResultSet`对象用于存储查询结果,可以通过迭代遍历获取数据。 9. **异常处理**: 在执行数据库操作时,必须妥善处理可能出现的`SQLException`。良好的做法是使用try-catch-finally块,确保资源(如`Connection`、`...

Global site tag (gtag.js) - Google Analytics