`
liulanghan110
  • 浏览: 1076886 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

DB2存储过程流程控制

阅读更多

 条件语句

if语句:

if 条件 then

执行语句;

else

执行语句;

end if;

如下面的存储过程:

create procedure Test(

OUT v_message varchar(100)

)

LANGUAGE SQL

BEGIN

declare v_count int;

set v_count =  1;

if v_count = 0 then

set v_message  = '0';

else

set v_message  = '1';

end if;

END@

执行后输出参数v_message的值为1

多个if-else的语句结构

if 条件 then

执行语句;

elseif 条件 then

执行语句;

elseif 条件 then

执行语句;

end if;

case语句

case 

when 条件 then

执行语句;

when 条件 then

执行语句;

else

执行语句;

end case;

如下存储过程:

create procedure Test(

OUT v_message varchar(100)

)

LANGUAGE SQL

BEGIN

declare v_count int;

set v_count =  1;

case 

when v_count = 0 then

set v_message  = '0';

when v_count = 1 then

set v_message  = '1';

when v_count = 2 then

set v_message  = '2';

else

set v_message  = '-1';

end case;

END@

循环语句

LOOP 循环  -- 简单的循环

L1: LOOP

SQL statements;

LEAVE L1; --跳出循环

END LOOP L1;

WHILE 循环  -- 进入前检查条件

WHILE  condition

DO

SQL statements

END WHILE;

REPEAT 循环 -- 退出前检查条件

REPEAT

SQL statements;

UNTIL  condition

END REPEAT;

FOR 循环 -- 结果集上的隐式循环

FOR  loop_name  AS

SELECT FROM

DO

SQL statements;

END FOR;

请注意,FOR 语句不同于其他的迭代语句,因为它用于迭代一个定义好的结果集中的行。

loop循环例子

create procedure Test(

OUT sum int

)

LANGUAGE SQL

BEGIN

declare v_count int;

set v_count =  0;

set sum = 0;

L1: LOOP 

 

set v_count = v_count + 1;

set sum = sum + v_count;

if v_count >= 10 then

LEAVE L1; --跳出循环

end if;

END LOOP L1;

END@

 

while循环例子

create procedure Test(

OUT sum int

)

LANGUAGE SQL

BEGIN

declare v_count int;

set sum = 0;

set v_count =  0;

WHILE  v_count < 10

DO

set v_count = v_count + 1;

set sum = sum + v_count;

END WHILE;

END@

 

REPEAT 循环例子

create procedure Test(

OUT sum int

)

LANGUAGE SQL

BEGIN

declare v_count int;

set sum = 0;

set v_count =  0;

 

REPEAT

set v_count = v_count + 1;

set sum = sum + v_count;

UNTIL  v_count >= 10

END REPEAT;

 

END@

for循环有些特别,它是迭代结果集的隐式循环下面举一个实际的例子。

需求:一张实时表,一个人每到一个地方,就有一条记录存在,存放样例:

 

张三 上海

 

张三 杭州

 

.....

 

要求,按人名进行汇总,将他到过的地方拼接,中间用'#'分隔

 

数据准备:

 

--创建表:

 

CREATE TABLE Recursive_Test

(User_Name VARCHAR(12),

City VARCHAR(12));

 

--数据插入

 

INSERT INTO Recursive_Test(User_Name,City)

values ('张三','杭州'),('张三','郑州'),('李四','杭州'),

('张三','南昌'),('李四','广州'),('王五','北京');

存储过程实现


 CREATE PROCEDURE

 

test_con
 
(
 
)
  DYNAMIC RESULT SETS
1
  LANGUAGE SQL
 
BEGIN

    DECLARE
v_name  varchar(12);
    DECLARE
v_str  varchar(50);
    DECLARE
v_city  varchar(200);
   
     DECLARE GLOBAL TEMPORARY TABLE Result
    
(
           
User_Name VARCHAR(12),
           
city VARCHAR(200)
    
)ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;
    
    
    
--双重 for循环实现字符串分组连接  --双重游标实现分组字符串连接
    FOR V1 AS CURSOR1 CURSOR FOR  select distinct user_name as v_name from Recursive_Test
    DO
       set v_city = '';
       FOR V2 AS CURSOR2 CURSOR FOR  select   city||' ' as v_str
       from Recursive_Test where user_name = v_name
       DO
          set v_city =   v_city||v_str; 
       END FOR;
       insert into  session.Result values( v_name,v_city);
    END FOR;  
   
   
    BEGIN
            DECLARE v_ret CURSOR WITH HOLD WITH RETURN TO CALLER FOR
               select * from SESSION.result;
              OPEN v_ret;
    END;
   
    RETURN v_errCode;
END
 

分享到:
评论

相关推荐

    db2存储过程开发

    存储过程是在数据库中存储的一组预编译的SQL语句和流程控制指令,用于执行特定任务。在银行等金融机构中,DB2存储过程的开发具有重要意义,它不仅能够提高数据处理的速度和效率,还能增强系统的安全性。 #### 二、...

    DB2存储过程-基础教程

    DB2存储过程提供了包括条件语句和迭代语句在内的控制语句,这些语句可用于控制存储过程的流程。条件语句允许基于条件执行不同的代码分支,而迭代语句则用于重复执行特定的代码块直到满足某个条件。 结果集是存储...

    DB2存储过程开发权威指南.存储过程学习速成教程

    1. **创建存储过程**:创建DB2存储过程通常涉及定义输入参数、输出参数、局部变量,以及一系列SQL语句。使用`CREATE PROCEDURE`语句来实现,指定存储过程的名称、参数列表、返回类型以及执行的SQL代码。 2. **调用...

    db2 存储过程实例

    在DB2中创建存储过程,需要使用CREATE PROCEDURE语句。例如,一个简单的存储过程可能用于返回表中的最大值: ```sql CREATE PROCEDURE GET_MAX_EMPLOYEE_ID (OUT max_id INT) BEGIN ATOMIC SELECT MAX(employee_id...

    DB2存储过程开发与优化

    1. **存储过程的创建**:创建存储过程涉及到定义输入和输出参数,以及编写SQL语句和流程控制结构。例如,你可以使用`CREATE PROCEDURE`语句来创建一个新的存储过程。 2. **调用存储过程**:应用程序可以通过执行`...

    db2存储过程基础

    创建存储过程的示例代码如下: ```sql CREATE PROCEDURE PROC_VARRAY_test (OUT mynames names) BEGIN -- 存储过程的主体,可以包含SQL语句和其他SQL PL构造 END; ``` 在存储过程中,可以使用声明的变量、...

    DB2存储过程写法介绍

    创建存储过程的基本语法是使用`CREATE PROCEDURE`语句,例如创建一个名为`TEST.P_PROCEDURE_TEST`的简单存储过程。一旦创建完成,可以通过`CALL`语句来执行存储过程。存储过程的结构包括参数列表、变量声明、游标...

    DB2存储过程语法大全

    为了在DB2中创建和使用SQL存储过程,需要在服务器上安装应用开发客户端和DB2支持的C/C++编译器,并正确配置相关环境变量,如`DB2_SQLROUTINE_COMPILER_PATH`和`DB2_SQLROUTINE_COMPILE_COMMAND`。这些配置可能因操作...

    DB2存储过程表空间sql专题

    在DB2中,创建存储过程通常使用CREATE PROCEDURE语句,可以包含参数输入、输出或 inout 类型。调用时,可以通过EXECUTE语句或者在应用程序中直接调用。存储过程还可以包含控制流程语句,如IF、WHILE等,使得在数据库...

    IBM DB2 SQL存储过程

    - **创建与调用**:介绍如何创建存储过程,并通过实例演示如何在应用中调用它们。 - **优点**:提高执行效率、增强代码的复用性、简化应用程序的复杂度等。 - **案例分析**:结合Order Entry 应用程序,深入探讨存储...

    DB2存储过程例

    该存储过程的创建语法遵循DB2的标准格式,包含了必要的输入和输出参数定义,以及内部的逻辑控制结构。 #### 三、存储过程参数详解 1. **输入参数**: - `in_Transfer_id`: 数据类型为`decimal(6,0)`,表示一个...

    存储过程的优点

    1. **预编译与优化**:存储过程在创建时就已经经过了预编译和优化的过程,这意味着执行存储过程时可以直接利用这些优化结果,而不必每次都重新编译SQL语句。 2. **内存驻留**:存储过程首次执行后会被缓存在内存中...

    DB2.SQL.PL.Essential.Guide(DB2 存储过程_English)

    2. **创建存储过程**:如何定义参数,指定输入、输出和输入/输出参数,以及无参数的存储过程。了解存储过程的返回值机制及其在不同情况下的使用。 3. **调用存储过程**:在应用程序中如何调用存储过程,如通过SQL...

    DB2存储过程

    控制流语句是 DB2 存储过程中的另一个重要组成部分,用于控制过程的执行流程。DB2 支持 IF 语句、CASE 语句、LOOP 语句、LEAVE 语句和ITERATE 语句等多种控制流语句。 游标处理 游标处理是 DB2 存储过程中的重要...

    DB2编程基础要点 sql 存储过程

    首先,创建存储过程时,必须注意语法的严谨性。在使用`CREATE PROCEDURE`语句时,"create"后的空白应仅使用空格,避免使用制表符(TAB键),因为制表符可能导致编译错误,这是DB2编程中的一个常见陷阱。 在使用临时表...

    IBM-DB2-存储过程红宝书

    IBM DB2数据库系统是一款先进的数据库管理系统,它支持复杂的事务处理,能够高效地管理大量数据。...无论是简单的数据操作还是复杂的业务流程管理,存储过程、触发器和用户定义函数都是构建强大数据库应用的关键技术。

    DB2开发基础知识-存储过程开发

    四、参数定义在创建存储过程时至关重要。DB2的参数类型包括IN(只读),OUT(只写)和INOUT(读写)。如`sp_sample`存储过程就定义了这三种类型的参数。 五、变量定义使用DECLARE关键字,可以指定初始值。例如,在`...

    DB2_SQL存储过程编写说明.doc

    在"资产负债.db2"的示例中,创建了一个名为`admin.BalanceSheetDayly`的存储过程,它有一个`OUT`参数`ProcState`。过程体中可能包含了处理资产负债数据的逻辑,但具体的SQL语句没有给出。 **4. SQL存储过程的其他...

    存储过程基本语法world文档

    - **基本结构**:存储过程由复合语句组成,可以包含变量声明、流程控制语句等。 - **Procedure Schema**:创建在当前连接的模式或指定的模式下。 - **SQLCODE和SQLSTATE**:这两个变量用于获取SQL操作的状态,DB2会...

Global site tag (gtag.js) - Google Analytics