技术开发 频道

DB2编程序技巧

    1.7 类似datedif计算两个日期的相差天数

    days(date(‘2001-06-05’)) – days(date(‘2001-04-01’))

    days 返回的是从0001-01-01 开始计算的天数

    1.8 写UDF的例子

    C写见sqllib\samples\cli\udfsrv.c

    1.9 创建含identity值(即自动生成的ID)的表

    建这样的表的写法

CREATE TABLE test (t1 SMALLINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 500, INCREMENT BY 1),

     t2 CHAR(1));

    在一个表中只允许有一个identity的column.

    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 cursorwith return to caller for

    selectmarket_code

    fromtb_market_code;

    --指定该结果集用于返回给调用者

    declare c2 cursorwith return to caller for

    selectmarket_code

    fromtb_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

    fetchcursor1 into out_market_code;

    --直接从结果集中赋值

    close cursor1;

    END P1

0
相关文章