• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    DB2编程序技巧 (四)

    发布者: 404号房间 | 发布时间: 2025-6-18 12:48| 查看数: 43| 评论数: 0|帖子模式

    正在看的db2教程是B2编程序技巧 (四)。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),
    &nbsp</p>
    正在看的db2教程是B2编程序技巧 (四)。;            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'@



    </p>
    上一页  [1] [2]


    来源:https://www.jb51.net/article/7699.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表