昨天安装了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数据

DB2存储过程入门实例相关推荐

  1. db2存储过程手动执行没有问题_轻松解决DB2创建存储过程时遇到的错误

    来源: 互联网 作者: 若水 2008-03-19/13:59 问:在 Unix 操作系统下,有时会发生当 DB2 用户使用如: db2 -td@ -vf 创建存储过程失败的情况,而查看 db2dia ...

  2. sqlserver存储过程入门之 游标

    1.游标是SQL的一个内存工作区,由系统或用户以变量的形式定义. 以下是基本步伐: 不懂的问我 定义,打开 ,使用,关闭,释放 DECLARE @temp VARCHAR(12) -- 临时变量 de ...

  3. sqlserver存储过程入门?看不懂打死我

    sqlserver存储过程入门 1.工具 2.基础知识 游标 DECLARE 赋值 set 赋值 into if else 代替 REPLACE CASE WHEN CONCAT 函数 字符串连接 B ...

  4. DB2快速入门—DB2 11的安装与使用

    DB2快速入门-DB2 11的安装与使用 1.准备 DB2是IBM开发的关系型数据库,目前在银行等领域使用较多. DB2 11是最新版本数据库,Express C是提供的免费版本,提供了大部分功能和特 ...

  5. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  6. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  7. SpringMVC 框架系列之初识与入门实例

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.SpringMVC 概述 (1).什么是 MVC:Model-View-Control Co ...

  8. 《HFSS电磁仿真设计从入门到精通》一第2章 入门实例——T形波导的内场分析和优化设计...

    本节书摘来自异步社区<HFSS电磁仿真设计从入门到精通>一书中的第2章,作者 易迪拓培训 , 李明洋 , 刘敏,更多章节内容可以访问云栖社区"异步社区"公众号查看 第2 ...

  9. oracle存储过程生成单号,Oracle生成单据编号存储过程的实例代码

    Oracle生成单据编号存储过程,在做订单类似的系统都可能会存在订单编号不重复,或是流水号按日,按年,按月进行重新编号. 可以参考以下存储过程 CREATE OR REPLACE procedure ...

最新文章

  1. Python 字符串及基本语句
  2. java 技术 管理_java技术转型产品或者项目管理,请大神指导?
  3. javascript 之clientHeight、scrollHeight、offsetHeight
  4. 让业务感知不到服务器的存在——基于弹性计算的无服务器化实践
  5. php 父子进程通信,PHP 进程及进程间通信
  6. 设计模式---观察者模式介绍与理解
  7. Programming Ruby学习笔记一
  8. Window setTimeout() 方法
  9. 程序员资源系列(不断完善中)
  10. Package Control 使用
  11. spotify注册服务器,【评测】Cocktail Audio N25:集USB解码、TIDAL、Spotify、NAS 串流、音乐服务器于......
  12. 小飞鱼通达OA二开 OA与HR系统集成解决方案
  13. 悲剧四个月python培训班,需要踩完坑犯过错,这些免费的编程资源,值得一生推
  14. Excel实战小技巧——批量操作
  15. elementUI分页删除最后一页数据时跳转回上一页并且el-table序号递增
  16. 基于libhid/libusb进行usb传输数据
  17. 关于Kubernetes 中通过 Kustomize 实现YAML资源文件组合与继承的一些笔记
  18. 智能小车红绿灯识别功能的实现(python,ubuntu)
  19. 受疫情影响,突遭上交所中止发行上市审核!亏损持续扩大的极飞科技,还能让农业智慧起来么?...
  20. python跳一跳脚本详解_微信跳一跳游戏 python脚本辅助得高分

热门文章

  1. 为什么每个女生都比较避讳别人问年龄问题?于是我偷偷写了一款年龄检测器,公司同事的年龄都被我知道了~
  2. [PB] PB中读写文件通用的两个函数
  3. Java网络编程:TCP,UDP,sock编程
  4. Android 获取android密钥哈希码(keytool -exportcert -alias openssl sha1 -binary | openssl base64)
  5. 提问的艺术!(转载)
  6. 20180903有关复数共轭的理解
  7. iOS Crash报告分析
  8. python江红书后第六章实验答案_C#NET程序设计教程实验指导(清华大学江红,余青松)实验源码第六章...
  9. 关于FIN_WAIT1---TCP四次挥手的状态
  10. php 公众号发表文章,公众号如何发文章不限次数(微信公众平台发文章流程)...