DB2存储过程入门实例
昨天安装了DB2Express-C版本,之前曾经写过Oracle的存储过程。在Oracle里写存储过程是一件很简单的事情,编译也是很简单。而想写DB2的存储过程则没那么容易,部署编译存储过程要是没有集成开发环境(如IBM data studio)或者不清楚的db2命令的话,那是让人很痛苦的事。而我就是其中的一位,我不想下载6百多M的开发环境,只好自己用txt文档编辑器写存储过程了,简单的存储过程是容易写的,按照db2 存储过程的语法去写就OK了。痛苦的是写好了不知道怎么样部署。以下以我刚刚写的一个简单的存储过程为例,说说DB2存储过程从编写代码到部署编译最后运行的过程。
首先,编写代码,代码如下:
CREATE PROCEDURE sales_status() ---存储过程可以设定输入参数和输出参数
LANGUAGE SQL ----DB2可以用多种语言编写存储过程,这里用的是纯SQL
BEGIN ---开始
DECLARE vID smallint; ---定义变量 和Oracle一样 DECLARE 变量名 变量的数据类型;
FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循环 tmp_brnd_cd预先创建好
DO ---循环体开始
SET vID=BRND_CD; ---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD) into vID
INSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入数据
END FOR; -----循环体结束
END @ -----存储过程结束
把代码文件保存为db2文件,我的文件名为 sample.db2,路径为:E:\db2pro
接着就是部署编译存储过程了,我下载了一两本电子书看,可惜都没说到怎么用命令行模式部署以及编译存储过程的,都介绍在集成开发环境下部署编译。~~~晕~~,幸亏在网上找到了(不过也找的挺辛苦的~~)。
在Windows下,进入命令模式,然后输入 db2cmd 就会进入db2 命令模式,然后输入 db2 -td@ -vf E:\db2pro\sample.db2 就开始编译存储过程了~~~!要是报错,那就要检查代码罗~。改完代码,重新编译罗~~~!
最后,运行存储过程,存储过程部署编译后,就是调用存储过程了。
db2 里使用call 命令调用存储过程,在db2命令模式下输入db2 call sample()即可~!
以上,只是一个简单的例子,很多东西还没涉及如出错处理,游标,在存储过程里使用临时表等等~~!
有一表的记录为:
Task_ID Employee_Name STEPWORKTIME
6262 张三 2
6262 ,成都酒吧设备回收; 李四 2
6262 王二 1.5
6265 成某 2
6265 赵某 2
6265 钱某 1.5
……
我想求一个函数能将Task_ID字段相同记录合并为一条记录。
即想得到如下结果:
Task_ID Employees WorkLoad
6262 张三、李四、王二 5.5
6265 成某、赵某、钱某 5.5
……
我写了一下,没写出UDF,只写了个存储过程。能应付他大概的要求。
可是楼主不怎么满意,想着与其丢掉,不如索性贴出来,大家批评批评^_^。
先创建一个表,名为FromTable
db2 create table FromTable(id varchar(10),name varchar(200),stepworktime int)
插入数据
db2 insert into FromTable values ('6262','张三',2)
db2 insert into FromTable values ('6262','李四',2)
db2 insert into FromTable values ('6262','王二',1.5)
db2 insert into FromTable values ('6265','成某',2)
db2 insert into FromTable values ('6265','赵某',2)
db2 insert into FromTable values ('6265','钱某',1.5)
现在再创建一个表,为ToTable
跟test1000一样的结构,用一个存储过程把你要的结果插进去
创表
db2 create TABLE ToTable ( id varchar(100), name varchar(100),sum int )
写存储过程
CREATE PROCEDURE ADMINISTRATOR.ProcConcatName ( )
------------------------------------------------------------------------
--SQL 存储过程
--Sisijian
--2005-01-20
------------------------------------------------------------------------
Lable1: begin
------------------------------------------------------------------------
--定义变量
--v_NumOfRecd存放对应FromTable每个id记录条数
--v_Index控制当前记录是在id相同的记录中第几条
--v_id等三个变量用于存放临时数据
--at_end控制是否到底
------------------------------------------------------------------------
DECLARE SQLSTATE CHAR(5);
DECLARE v_NumOfRecd int;
,成都电缆回收; DECLARE v_Index int;
DECLARE v_Id varCHAR(100);
DECLARE v_ConcatedName varchar(5000);
DECLARE v_SumOfWorkTime int;
DECLARE at_end INT DEFAULT 0;
DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE C1 CURSOR FOR
SELECT id, count(*)
FROM FromTable
GROUP BY id
ORDER BY id;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
------------------------------------------------------------------------
--游标移动一次,就到一个新的id,id不会重复,因为经过上面的group by
------------------------------------------------------------------------
OPEN C1;
Concat_Loop:
LOOP
FETCH C1 INTO v_Id, v_NumOfRecd;
IF at_end = 1 THEN
LEAVE Concat_Loop;
END IF;
------------------------------------------------------------------------
--遇到每个id ,第一条记录都应该直接插入的
------------------------------------------------------------------------
SET v_Index=1;
SET v_C cdth= (SELECT name FROM
(SELECT ROW_NUMBER() over() as a ,FromTable.* FROM FromTable where id = v_Id) as x where a=v_Index );
SET v_SumOfWorkTime = (SELECT STEPWORKTIME FROM
(SELECT ROW_NUMBER() over() as a ,FromTable.* FROM FromTable where id = v_Id) as x where a=v_Index );
INSERT INTO ToTable VALUES (v_Id, v_ConcatedName,v_SumOfWorkTime);
SET v_Index=2;
------------------------------------------------------------------------
--如果有第二条的话,就连接名字字符串,累加STEPWORKTIME数据
昨天安装了DB2Express-C版本,之前曾经写过Oracle的存储过程。在Oracle里写存储过程是一件很简单的事情,编译也是很简单。而想写DB2的存储过程则没那么容易,部署编译存储过程要是没有集成开发环境(如IBM data studio)或者不清楚的db2命令的话,那是让人很痛苦的事。而我就是其中的一位,我不想下载6百多M的开发环境,只好自己用txt文档编辑器写存储过程了,简单的存储过程是容易写的,按照db2 存储过程的语法去写就OK了。痛苦的是写好了不知道怎么样部署。以下以我刚刚写的一个简单的存储过程为例,说说DB2存储过程从编写代码到部署编译最后运行的过程。
首先,编写代码,代码如下:
CREATE PROCEDURE sales_status() ---存储过程可以设定输入参数和输出参数
LANGUAGE SQL ----DB2可以用多种语言编写存储过程,这里用的是纯SQL
BEGIN ---开始
DECLARE vID smallint; ---定义变量 和Oracle一样 DECLARE 变量名 变量的数据类型;
FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循环 tmp_brnd_cd预先创建好
DO ---循环体开始
SET vID=BRND_CD; ---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD) into vID
INSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入数据
END FOR; -----循环体结束
END @ -----存储过程结束
把代码文件保存为db2文件,我的文件名为 sample.db2,路径为:E:\db2pro
接着就是部署编译存储过程了,我下载了一两本电子书看,可惜都没说到怎么用命令行模式部署以及编译存储过程的,都介绍在集成开发环境下部署编译。~~~晕~~,幸亏在网上找到了(不过也找的挺辛苦的~~)。
在Windows下,进入命令模式,然后输入 db2cmd 就会进入db2 命令模式,然后输入 db2 -td@ -vf E:\db2pro\sample.db2 就开始编译存储过程了~~~!要是报错,那就要检查代码罗~。改完代码,重新编译罗~~~!
最后,运行存储过程,存储过程部署编译后,就是调用存储过程了。
db2 里使用call 命令调用存储过程,在db2命令模式下输入db2 call sample()即可~!
以上,只是一个简单的例子,很多东西还没涉及如出错处理,游标,在存储过程里使用临时表等等~~!
有一表的记录为:
Task_ID Employee_Name STEPWORKTIME
6262 张三 2
6262 ,成都酒吧设备回收; 李四 2
6262 王二 1.5
6265 成某 2
6265 赵某 2
6265 钱某 1.5
……
我想求一个函数能将Task_ID字段相同记录合并为一条记录。
即想得到如下结果:
Task_ID Employees WorkLoad
6262 张三、李四、王二 5.5
6265 成某、赵某、钱某 5.5
……
我写了一下,没写出UDF,只写了个存储过程。能应付他大概的要求。
可是楼主不怎么满意,想着与其丢掉,不如索性贴出来,大家批评批评^_^。
先创建一个表,名为FromTable
db2 create table FromTable(id varchar(10),name varchar(200),stepworktime int)
插入数据
db2 insert into FromTable values ('6262','张三',2)
db2 insert into FromTable values ('6262','李四',2)
db2 insert into FromTable values ('6262','王二',1.5)
db2 insert into FromTable values ('6265','成某',2)
db2 insert into FromTable values ('6265','赵某',2)
db2 insert into FromTable values ('6265','钱某',1.5)
现在再创建一个表,为ToTable
跟test1000一样的结构,用一个存储过程把你要的结果插进去
创表
db2 create TABLE ToTable ( id varchar(100), name varchar(100),sum int )
写存储过程
CREATE PROCEDURE ADMINISTRATOR.ProcConcatName ( )
------------------------------------------------------------------------
--SQL 存储过程
--Sisijian
--2005-01-20
------------------------------------------------------------------------
Lable1: begin
------------------------------------------------------------------------
--定义变量
--v_NumOfRecd存放对应FromTable每个id记录条数
--v_Index控制当前记录是在id相同的记录中第几条
--v_id等三个变量用于存放临时数据
--at_end控制是否到底
------------------------------------------------------------------------
DECLARE SQLSTATE CHAR(5);
DECLARE v_NumOfRecd int;
,成都电缆回收; DECLARE v_Index int;
DECLARE v_Id varCHAR(100);
DECLARE v_ConcatedName varchar(5000);
DECLARE v_SumOfWorkTime int;
DECLARE at_end INT DEFAULT 0;
DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE C1 CURSOR FOR
SELECT id, count(*)
FROM FromTable
GROUP BY id
ORDER BY id;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
------------------------------------------------------------------------
--游标移动一次,就到一个新的id,id不会重复,因为经过上面的group by
------------------------------------------------------------------------
OPEN C1;
Concat_Loop:
LOOP
FETCH C1 INTO v_Id, v_NumOfRecd;
IF at_end = 1 THEN
LEAVE Concat_Loop;
END IF;
------------------------------------------------------------------------
--遇到每个id ,第一条记录都应该直接插入的
------------------------------------------------------------------------
SET v_Index=1;
SET v_C cdth= (SELECT name FROM
(SELECT ROW_NUMBER() over() as a ,FromTable.* FROM FromTable where id = v_Id) as x where a=v_Index );
SET v_SumOfWorkTime = (SELECT STEPWORKTIME FROM
(SELECT ROW_NUMBER() over() as a ,FromTable.* FROM FromTable where id = v_Id) as x where a=v_Index );
INSERT INTO ToTable VALUES (v_Id, v_ConcatedName,v_SumOfWorkTime);
SET v_Index=2;
------------------------------------------------------------------------
--如果有第二条的话,就连接名字字符串,累加STEPWORKTIME数据
发表评论
-
一些数据库自定义函数
2013-10-15 21:42 912oracle 写法: --联系人列表 create or r ... -
如何远程连接db2数据库
2012-09-18 10:10 952在DB2数据库中,编目(catal ... -
[转]DB2行列转换
2012-09-13 13:15 865行转列 给出下面的数据: CREATE TABLE Sales ... -
存储过程 入门
2012-09-07 09:49 891示例说明:先创建一个临时表,并插入数据,然后查询临时表,返回游 ... -
oracle 常用sql
2012-03-27 10:49 849--创建用户 CREATE USER &q ... -
oracle 复制表
2012-03-15 11:47 11281.不同用户之间的表数 ... -
Oracle Minus关键字
2012-03-06 15:56 1143//--一句话 去同存异,留第一个sql里面的结果。 //创建 ... -
闪回 找回已删除的数据
2012-02-24 15:26 821SCN(系统改变号),它的英文全拼为:System Chang ... -
orcl用sql生成xml
2012-02-20 19:03 1029最近做项目,需要提供xml字符串给第三方,之后我试了试这两种数 ... -
oracle视图导出xml文件,解析xml,生成sql语句建表
2012-02-20 18:54 2658今天在做测试数据库的时候,需要把用户提供的视图,转换成我们的测 ... -
利用XML在不同数据库中交换数据
2012-02-20 13:53 915XML在不同语言,不同数据源中交换数据已经成为主流。在这些的D ... -
crazy idea
2011-12-13 09:08 665不用中间量交换: 1.a = a + b - (b = a); ... -
一些很精妙的sql
2011-12-12 23:54 7861、说明:复制表(只复制结构,源表名:a 新表名:b) (Ac ... -
记录几个sql
2011-07-28 14:51 9371> delete from a where exist ...
相关推荐
在学习过程中,理解DB2的存储过程、触发器、视图等数据库对象的创建和管理也非常重要,这些能够提高代码的复用性和数据库的效率。同时,掌握DB2的安全性设置,如用户权限管理、角色和授权,对于确保数据安全至关重要...
DB2提供了创建和调用自定义函数和存储过程的能力,以提高代码复用和性能。 9. **安全性与权限** DB2提供了精细的权限控制,允许管理员通过`GRANT`和`REVOKE`语句管理用户访问权限,确保数据的安全性。 10. **性能...
IBM DB2通用数据库SQL入门是针对想要学习和掌握IBM DB2数据库系统以及SQL语言的初学者的一份宝贵资源。这份PDF教程将引导你逐步了解DB2的基础知识,并深入理解SQL语言在DB2环境中的应用。 IBM DB2是IBM公司开发的一...
3. 视图与存储过程:学习如何创建视图简化查询,以及编写存储过程实现业务逻辑。 五、DB2性能优化 1. 查询优化:理解DB2的查询优化器工作原理,如何编写高效的SQL语句。 2. 索引策略:选择合适的索引类型,优化查询...
安装完成后,可以通过DB2 Control Center或命令行界面进行数据库实例的创建、启动和停止。 DB2数据仓库是用于存储大量历史数据的特殊数据库,用于数据分析和决策支持。配置DB2数据仓库时,通常会涉及数据分区、索引...
DB2的安装过程相对简单,通常包括下载安装包、运行安装程序、选择安装类型(如Server、Client或Developer)以及配置数据库实例。配置过程中,你需要设置数据库管理员(DBA)的用户名和密码,以及指定数据库的存储...
- 创建数据库:使用命令行或管理工具创建新的数据库实例,设置存储空间、字符集等属性。 - 数据库备份与恢复:学习如何进行数据库备份,以及在数据丢失或故障时如何恢复。 4. **SQL基础** - DDL(Data ...
IBM DB2是一款强大的关系型数据库管理系统,由IBM公司开发,广泛应用于企业级的数据存储和管理。本快速入门指南将引导你了解如何在不同系统平台上安装、配置DB2服务器,并进行数据迁移等数据库级别的操作。 一、DB2...
本教程将逐步指导用户如何安装和配置DB2,包括设置环境变量、创建实例和数据库。对于新手来说,理解这些步骤至关重要,因为它们为后续的数据库操作打下基础。 在学习DB2的使用时,我们将接触到SQL语句的编写,如...
- **数据库创建**: 安装完成后,可以使用DB2命令行工具或图形化工具创建新的数据库实例,并设置相关的存储空间、日志文件等参数。 #### 数据库管理 - **备份与恢复**: DB2 v9.1 提供了丰富的备份和恢复策略,支持全...
安装过程通常包括下载安装包、运行安装程序、选择安装选项和配置数据库实例。注意,安装过程中需要设置管理员权限,并且可能需要根据你的系统环境调整内存分配和磁盘空间。 一旦安装完成,你可以开始创建数据库。在...
- **实例与数据库**: 创建和管理DB2实例,每个实例可以包含多个数据库。 - **配置参数**: 如内存分配、日志路径、连接数限制等,需要根据实际需求调整。 3. **SQL语言** - **数据查询**: 使用SELECT语句,包括...
DB2 Setup Wizard适用于Windows和Unix平台,可以在安装过程中创建实例;Silent install同样适用于两个平台,但需要响应文件来指导安装;而db2_install脚本安装仅限于Unix平台,需在安装后手动创建实例。需要注意的是...
### DB2新手快速入门教程:全面解析与安装指南 #### DB2简介与产品家族 IBM DB2(Database 2)是一种先进的关系型数据库管理系统(RDBMS),由IBM开发,适用于各种操作系统,如Windows、UNIX、Linux等。DB2 ...
DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。在Windows操作系统上使用DB2,初学者可能会遇到一些挑战,但通过"DB2-windows快速入门"指南,这些问题可以迎刃而解。以下是一些核心知识...
2. **安装与配置**:学习如何在不同操作系统(如Windows、Linux、Unix)上安装DB2,以及配置数据库环境,包括设置系统参数、创建数据库实例等。 3. **SQL语言**:SQL是与数据库交互的主要工具。本书将详细介绍SQL的...
2. **DB2安装与配置**:学习如何在不同的操作系统上安装DB2,设置环境变量,创建数据库实例,以及连接到DB2服务器。 3. **SQL基础**:掌握SQL的基本语句,如SELECT用于查询数据,INSERT用于插入数据,UPDATE用于...