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'@

时间: 2024-10-16 10:59:31

DB2编程序技巧 (四)的相关文章

DB2编程序技巧 (四)_DB2

正在看的db2教程是: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 se

DB2编程序技巧 (六)_DB2

正在看的db2教程是:DB2编程序技巧 (六).2.2 SQL语句尽量写复杂SQL    尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL语句对性能会有所改善.    DB2的SQL Engieer对复杂语句的优化能力比较强,基本上不用当心语句的性能问题. Oracle 则相反,推荐将复杂的语句简单化,SQL Engieer的优化能力不是特别好. 这是因为每一个SQL语句都会有reset SQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗. 一个总的思想就是尽量减少

DB2编程序技巧 (十)_DB2

正在看的db2教程是:DB2编程序技巧 (十).4.11 db2环境变量 db2 重装后用如下方式设置db2的环境变量,以保证sp可编译 将set_cpl 放到AIX上, chmod +x set_cpl, 再运行之 set_cpl的内容 db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlc_r  -g \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -bE:SQLROUTINE_FILENAME.exp -e S

DB2编程序技巧 (八)_DB2

正在看的db2教程是:DB2编程序技巧 (八).4.2 创建Database create database head using codeset IBM-eucCN territory CN; 这样可以支持中文. 4.3 手工做数据库远程(别名)配置 db2  catalog tcpip  node   node1  remote   172.28.200.200 server  50000 db2  catalog db    head   as     test1 at  node   n

DB2编程序技巧 (一)_DB2

正在看的db2教程是:DB2编程序技巧 (一).1 DB2编程 1.1 建存储过程时CREATE 后一定不要用TAB键 3 1.2 使用临时表 3 1.3 从数据表中取指定前几条记录 3 1.4 游标的使用 4 注意commit和rollback 4 游标的两种定义方式 4 修改游标的当前记录的方法 5 1.5 类似DECODE的转码操作 5 1.6 类似CHARINDEX查找字符在字串中的位置 5 1.7 类似DATEDIF计算两个日期的相差天数 5 1.8 写UDF的例子 5 1.9 创建含

DB2编程序技巧 (五)_DB2

正在看的db2教程是:DB2编程序技巧 (五).1.16 存储过程fence及unfence fence的存储过程单独启用一个新的地址空间,而unfence的存储过程和调用它的进程使用同一个地址空间. 一般而言,fence的存储过程比较安全. 但有时一些特殊的要求,如要取调用者的pid,则fence的存储过程会取不到,而只有unfence的能取到. 1.17 SP错误处理用法 如果在SP中调用其它的有返回值的,包括结果集.临时表和输出参数类型的SP, DB2会自动发出一个SQLWarning.而

DB2编程序技巧 (三)_DB2

正在看的db2教程是:DB2编程序技巧 (三).  另一种为       pcursor1: for loopcs1 as  cousor1  cursor  as select  market_code  as market_code            from tb_market_code            for update         do         end for;        这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close.   

DB2编程序技巧 (九)_DB2

正在看的db2教程是:DB2编程序技巧 (九).4.8 查看本instance下有哪些database db2 LIST DATABASE DIRECTORY  [ on /home/db2inst1 ] 4.9 查看及更改数据库head的配置 请注意,在大多数情况下,更改了数据的配置后,只有在所有的连接全部断掉后才会生效. 查看数据库head的配制 db2 get db cfg for head 更改数据库head的某个设置的值 4.9.1 改排序堆的大小 db2 update db cfg 

DB2编程序技巧 (二)

1 DB2编程 1.1 建存储过程时Create 后一定不要用TAB键 create procedure 的create后只能用空格,而不可用tab健,否则编译会通不过. 切记,切记. 1.2 使用临时表   要注意,临时表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建临时表的.   另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的.