DB2编程序技巧(四)
DB2 技巧 编程序
2023-06-13 09:13:53 时间
正在看的db2教程是:DB2编程序技巧(四)。1.10预防字段空值的处理
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,"ABSENT"),ADMRDEPT
FROM DEPARTMENT
COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。
和oracle的isnull类似,但isnull好象只能两个表达式。
1.11取得处理的记录数
declare v_count int;
updatetb_testsett1="0"
wheret2="2";
--检查修改的行数,判断指定的记录是否存在
get diagnosticsv_ 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.15C存储过程参数注意
create procedure pr_clear_task_ctrl(
IN IN_BRANCH_CODE char(4),
 [1] [2] 下一页正在看的db2教程是:DB2编程序技巧(四)。; 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"@
上一页 [1] [2]
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,"ABSENT"),ADMRDEPT
FROM DEPARTMENT
COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。
和oracle的isnull类似,但isnull好象只能两个表达式。
1.11取得处理的记录数
declare v_count int;
updatetb_testsett1="0"
wheret2="2";
--检查修改的行数,判断指定的记录是否存在
get diagnosticsv_ 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.15C存储过程参数注意
create procedure pr_clear_task_ctrl(
IN IN_BRANCH_CODE char(4),
 
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"@
相关文章
- Linux DB2数据库备份实践与维护(linuxdb2备份)
- 轻松搞定:Linux安装DB2的简明图解(linux安装db2图解)
- Linux安装DB2:一步步到位(在linux下安装db2)
- 从Linux系统启动DB2数据库(linux启动db2)
- Linux下DB2系统快速启动指南(linux启动db2)
- 如何在Linux中查看DB2数据库的端口信息(linux查看db2端口)
- Linux下快捷构建DB2数据库(linuxdb2建库)
- Linux下DB2客户端的安装部署(db2linux客户端)
- 迁移实时完成DB2到Oracle迁移一步一步把握迁移进度(db2转oracle实时)
- 研究DB2表的导入到Oracle的方法(db2表导入oracle)
- DB2表数据转到Oracle实现方法及注意事项(db2表转到oracle)
- 从Db2到Oracle,数据库迁移之旅(db2换成Oracle)
- 比较DB2与Oracle谁会胜出(db2 差 oracle)
- DB2迁移Oracle实时超越界限(db2实时转oracle)
- Oracle数据库比DB2强大多步(oracle优于db2)
- 比较Oracle与DB2数据库技术的异同(oracle与db2关系)
- 一步到位将Oracle数据迁移到DB2上(oracle2db2)
- DB2编程序技巧(十)
- DB2编程序技巧(七)
- 在DB2中提高INSERT性能的技巧(1)
- DB2中的数据移动(一)