当前位置: 首页 > 图文教程 > 数据库 > DB2 > DB2编程序技巧 (四)

DB2
如何访问大型机、小型机上的DB2 9数据服务器
DB2 9(Viper)快速入门
段云峰:DB2 9对企业有3点帮助
DB2专家王云谈商业智能BI
DB2 9的九大新特性
国内学院派专家对DB2 9新产品赞不绝口
DB2中的数据移动(一)
DB2大事记
DB2编程序技巧(1)
创建一个空的IBM DB2 ECO数据库的方法
在DB2数据库的表中插入和删除数据
在DB2环境中创建DB2数据库
为DB2数据库创建表空间
DB2数据库SQL语法参考手册
使用 DB2 对象:创建模式、表和视图
使用 DB2 对象:创建约束
使用 DB2 对象:创建索引
导入、装载和导出DB2数据库的数据
为DB2数据库添加验证约束
从DB2数据表和视图查询数据

DB2编程序技巧 (四)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 51 ::
收藏到网摘: n/a

1.10 预防字段空值的处理
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT
FROM DEPARTMENT
   COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。
   和oracle的isnull类似,但isnull好象只能两个表达式。
     

1.11 取得处理的记录数
declare v_count int;
update tb_test set t1=’0’
where t2=’2’;
--检查修改的行数,判断指定的记录是否存在
get diagnostics v_ count=ROW_COUNT;     
只对update,insert,delete起作用.
不对select into 有效


1.12 从存储过程返回结果集(游标)的用法
1、建一sp返回结果集
CREATE PROCEDURE DB2INST1.Proc1 (  )
    LANGUAGE SQL
    result sets 2(返回两个结果集)
------------------------------------------------------------------------
-- SQL 存储过程 
------------------------------------------------------------------------
P1: BEGIN
        declare c1 cursor  with return to caller for 
            select  market_code
            from    tb_market_code;
        --指定该结果集用于返回给调用者
        declare c2 cursor  with return to caller for 
            select  market_code
            from    tb_market_code;
         open c1;
         open c2;
END P1                                       


2、建一SP调该sp且使用它的结果集

CREATE PROCEDURE DB2INST1.Proc2 (
out out_market_code char(1))
    LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存储过程 
------------------------------------------------------------------------
P1: BEGIN

 declare loc1,loc2 result_set_locator varying; 
--建立一个结果集数组
call proc1;
--调用该SP返回结果集。
associate result set locator(loc1,loc2) with procedure proc1;
--将返回结果集和结果集数组关联
 allocate cursor1 cursor for result set loc1;
 allocate cursor2 cursor for result set loc2;
--将结果集数组分配给cursor
fetch  cursor1 into out_market_code;
--直接从结果集中赋值
close cursor1;         

END P1

3、动态SQL写法
     DECLARE CURSOR C1 FOR STMT1; 
     PREPARE STMT1 FROM
        'ALLOCATE C2 CURSOR FOR RESULT SET ?';
4、注意:
一、 如果一个sp调用好几次,只能取到最近一次调用的结果集。
二、 allocate的cursor不能再次open,但可以close,是close sp中的对应cursor。

1.13 类型转换函数
select cast ( current time as char(8)) from tb_market_code

1.14 存储过程的互相调用
目前,c sp可以互相调用。
Sql sp 可以互相调用,
Sql sp