浅谈db2与oracle存储过程的不同之处

1、oracle中调用存储过程使用exec关键字,db2中使用call关键字

2、db2中不支持”or replace”的语法;且参数名与IN/OUT的位置也需互换(如:in nd varchar(32)), 声明变量时须使用declare关键字,为变量赋值时须使用set关键字。

3、 对于Oracle中的%TYPE的功能

 oracle:name user%rowtype;   修改为  db2:declare name anchor row of user;(或视图)
REATE PROCEDURE SINO_ZGS.GENERATE_ZF_MRKB_YSZX_BBQS
 (IN VAR_ND VARCHAR(4), 
  IN VAR_QJ VARCHAR(2), 
  IN VAR_HZD VARCHAR(32), 
  IN VAR_LZD VARCHAR(32), 
  IN VAR_BBBH VARCHAR(20), 
  IN VAR_BMC VARCHAR(20), 
  IN VAR_ZDMC VARCHAR(20), 
  IN VAR_BJDMTYPE VARCHAR(1)
 ) 
  SPECIFIC SINO_ZGS.SQL140417182027500
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  BEGIN
    DECLARE VAR_RWZQ varchar(20);
    DECLARE bb_sql varchar(20000);
    DECLARE VAR_GXQJ varchar(2);
    DECLARE VAR_GXND varchar(4);
    DECLARE DEC_ZS_ZGSBB DECIMAL(20,6);
	
    DECLARE cur_zgsbb CURSOR FOR (
        select BBSJ_DATA from rprwbbsj 
        WHERE rpbbsj_rwbh =  '20101' AND sjzd_tbdw = '1' AND sjzd_bh = '0002' AND bbzd_bh = '20101'||VAR_BBBH 
        AND sjzd_bblx = '9' AND hzd_orde = VAR_HZD AND lzd_orde = VAR_LZD and bbzd_date = VAR_ND||'0'||VAR_QJ||'004');
    open cur_zgsbb;
    FETCH cur_zgsbb INTO DEC_ZS_ZGSBB;
    close cur_zgsbb;
	
    SET VAR_GXND = VAR_ND;
    set VAR_GXQJ = right(rtrim(char((INT(VAR_QJ)-1)/3+1+100)),2);

    IF INT(VAR_QJ) >= 10
    THEN
        SET VAR_RWZQ = VAR_ND||'0'||VAR_QJ||'004';
    ELSE 
        SET VAR_RWZQ = VAR_ND||'0'||VAR_QJ||'004';
    END IF;
	
    delete from SINO_ZGS.ZF_MRKB_YSZX_BBBJDM where ND=VAR_ND and QJ=VAR_QJ;
    commit;
  
    SET bb_sql ='update SINO_ZGS.ZF_MRKB_YSZXKD_'||VAR_BMC||' a 
        set a.'||VAR_ZDMC||' = (select round(b.SZ/10000,6) from SINO_ZGS.ZF_MRKB_YSZX_TEMP b where a.ZZNM = b.ZZBH and a.ND=b.ND
        and a.QJ=b.QJ and a.HZFS=b.HZFS)
        where a.'||VAR_ZDMC||' is null and a.ND='''||VAR_ND||''' and QJ='''||VAR_QJ||'''';
    PREPARE r_sql from bb_sql;
    EXECUTE r_sql;
    COMMIT;
END;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值