繁体中文
设为首页
加入收藏
当前位置:数据库技术首页 >> DB2教程 >> DB2编程序技巧 (四)

DB2编程序技巧 (四)

2007-03-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:1.10 预防字段空值的处理 SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT FROM DEPARTMENT COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。 和oracle的isnull类似,但...
关键字:技巧 DB2

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 可以调用C sp,

但C sp 不可以调用Sql sp(最新的说法是可以)

1.15 C存储过程参数注意

create procedure pr_clear_task_ctrl(

IN IN_BRANCH_CODE char(4),

IN IN_TRADEDATE char(8),

IN IN_TASK_ID char(2),

IN IN_SUB_TASK_ID char(4),

OUT OUT_SUCCESS_FLAG INTEGER )

DYNAMIC RESULT SETS 0

LANGUAGE C

PARAMETER STYLE GENERAL WITH NULLS(如果不是这样,sql 的sp将不能调用该用c写的存储过程,产生保护性错误)

NO DBINFO

FENCED

MODIFIES SQL DATA

EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@

责任编辑:admin
相关文章