db2-把这个oracle存储转换成DB2储存过程,怎么转换。急!急!急!

问题描述

把这个oracle存储转换成DB2储存过程,怎么转换。急!急!急!

--存储过程包
CREATE OR REPLACE PACKAGE Pkg_Deal_Data AS

-- Author  : liuchj@sunline.cn
-- Created : 2016/4/1 21:07:57
-- Purpose : 会计流水数据整理

PROCEDURE Com_Main(Pi_Pckgdt IN VARCHAR2); --报文

END Pkg_Deal_Data;

CREATE OR REPLACE PACKAGE BODY Pkg_Deal_Data IS
PROCEDURE Deal_Data(Pi_Pckgdt IN VARCHAR2 --传入报文参数
) IS
i_Count INT;
BEGIN
--请将如下语句替换为生成gli_vchr的代码
i_Count := 1;
--//结束
END Deal_Data;

PROCEDURE Deal_Succ(Pi_Pckgdt IN VARCHAR2) IS --传入报文参数
BEGIN

    UPDATE Glo_Imdt g SET g.Status = '5' WHERE g.Bathid = pkg_pub.get_pkgstr('batchid', Pi_Pckgdt)
    AND stacid = pkg_pub.get_pkgstr('user_stacid', Pi_Pckgdt) AND plancd = pkg_pub.get_pkgstr('plancd', Pi_Pckgdt);
    commit;
END Deal_Succ;
PROCEDURE Deal_Error(Pi_Pckgdt IN VARCHAR2 --传入报文参数
                     ) IS
BEGIN
    UPDATE Glo_Imdt g SET g.Status = '6' WHERE g.Bathid = pkg_pub.get_pkgstr('batchid', Pi_Pckgdt)
    AND stacid = pkg_pub.get_pkgstr('user_stacid', Pi_Pckgdt) AND plancd = pkg_pub.get_pkgstr('plancd', Pi_Pckgdt);
    commit;
END Deal_Error;
PROCEDURE Com_Main(Pi_Pckgdt IN VARCHAR2 --传入报文参数
                   ) IS
BEGIN
    Deal_Data(Pi_Pckgdt);
    Deal_Succ(Pi_Pckgdt);
EXCEPTION
    WHEN OTHERS THEN
        Deal_Error(Pi_Pckgdt);
END Com_Main;

END Pkg_Deal_Data;

--函数包
CREATE OR REPLACE PACKAGE Pkg_Pub IS

FUNCTION Get_Pkgstr(Pi_Fildna IN VARCHAR2, --字段名称
Pi_Pkgstr IN VARCHAR2) --报文字符串
RETURN VARCHAR2; --字段对应的值(如果是循环字段则返回第一个字段的值)

END Pkg_Pub;

CREATE OR REPLACE PACKAGE BODY Pkg_Pub IS
c_Trans_Char CONSTANT VARCHAR2(1) := ''; --转义字符
c_Level_Delimiter CONSTANT VARCHAR2(1) := ':'; --层次分隔符
c_Name_Value_Delimiter CONSTANT VARCHAR2(1) := '='; --字段值分隔符
c_Field_Delimiter CONSTANT VARCHAR2(1) := '|'; --字段分隔符

/**
取得字段值的位置:
如果是在第一个,不需要匹配'|'
1、找出filed字段的起始值,必须是该字段前后为空、或者前后都必须为4个特殊字符,方能匹配
*/
FUNCTION Field_Pos(Pi_Source VARCHAR2,
Pi_Param VARCHAR2) RETURN INT IS
l_Lipos PLS_INTEGER; --字段结束位置
l_Length PLS_INTEGER;
l_Bgchar VARCHAR2(20);
l_Edchar VARCHAR2(20);
BEGIN
BEGIN
l_Length := Length(Pi_Source);
l_Lipos := Instr(Pi_Source,
Pi_Param);
--没有找到字段直接返回0
IF l_Lipos = 0 THEN
RETURN(0);
END IF;
WHILE (l_Lipos < l_Length) LOOP
l_Bgchar := '';
l_Edchar := '';
IF l_Lipos <> 1 THEN
--操作字符串在中间的数据

                l_Bgchar := Substr(Pi_Source,
                                   l_Lipos - 1,
                                   1);

            END IF;

            --取出字段结束后的第一个字符
            l_Edchar := Substr(Pi_Source,
                               Length(Pi_Param) + l_Lipos,
                               1);

            --判断字符后的第一个字符是否为特殊字符,为特殊字符就认为找到该字段的值
            IF ((l_Bgchar IN (c_Trans_Char,
                              c_Level_Delimiter,
                              c_Name_Value_Delimiter,
                              c_Field_Delimiter) OR l_Bgchar IS NULL) AND
               (l_Edchar IN (c_Trans_Char,
                              c_Level_Delimiter,
                              c_Name_Value_Delimiter,
                              c_Field_Delimiter) OR l_Edchar IS NULL)) THEN

                RETURN(l_Lipos);
            END IF;

            l_Lipos := Instr(Pi_Source,
                             Pi_Param,
                             l_Lipos + 1);
            IF l_Lipos = 0 THEN
                RETURN(0);
            END IF;

        END LOOP;
        --循环到结束都未找到,则表示无法找到

        RETURN(0);
    END;
END;

/*
2、找出该filed是否有转义符,从filed字段后=处向前推转义符个数,拼成对应都转移字符串
*/
FUNCTION Trans_Str(Pi_Source   VARCHAR2,
                   Pi_Param    VARCHAR2,
                   Pi_Fieldpos INT) RETURN VARCHAR2 IS
    l_Str       VARCHAR2(20);
    l_Del_Len   PLS_INTEGER := 0; --分隔符长度
    l_Del_Bgpos PLS_INTEGER := 0; --=分隔符掉起始位置
    l_Del_Edpos PLS_INTEGER := 0; --=分隔符掉结束位置
BEGIN

    BEGIN
        l_Del_Bgpos := Pi_Fieldpos + Length(Pi_Param); --=分隔符掉起始位置
        --从filed结束后掉第一个与分割匹配的位置
        l_Del_Edpos := Instr(Pi_Source,
                             c_Name_Value_Delimiter,
                             l_Del_Bgpos); --c_Name_Value_Delimiter := '='; --字段值分隔符

        --分隔符长度:
        l_Del_Len := l_Del_Edpos - l_Del_Bgpos;
        l_Str     := Substr(Pi_Source,
                            l_Del_Bgpos,
                            l_Del_Len);

        RETURN(l_Str); --c_Trans_Char := ''; --转义字符

    END;
END Trans_Str;

/**
3、从filed的=后一直匹配到第一个“转移字符+|”到字符,并且前后都没有转移字符为止,否则向后找,如果遍历完成后都没有,则返回空字符串
*/
FUNCTION Value_Pos(Pi_Lsstr           VARCHAR2,
                   Pi_Field_Delimiter VARCHAR2) RETURN INT IS
    l_Lipos  PLS_INTEGER; --字段结束位置
    l_Length PLS_INTEGER;
    l_Char   VARCHAR2(20);
BEGIN
    BEGIN
        l_Length := Length(Pi_Lsstr);
        l_Lipos  := 0;
        WHILE (l_Lipos <= l_Length) LOOP
            l_Lipos := l_Lipos + 1;
            l_Lipos := Instr(Pi_Lsstr,
                             Pi_Field_Delimiter,
                             l_Lipos);
            l_Char  := Substr(Pi_Lsstr,
                              l_Lipos - 1,
                              1);
            IF l_Char <> c_Trans_Char THEN
                RETURN(l_Lipos);
            END IF;

        END LOOP;
        RETURN(0);
    END;
END Value_Pos;

/**
替换掉值中掉转义符
*/
FUNCTION Value_Notranc(Pi_Values VARCHAR2) RETURN VARCHAR2 IS
    l_Values VARCHAR2(32767);
BEGIN
    BEGIN
        l_Values := Pi_Values;
        l_Values := REPLACE(l_Values,
                            '\',
                            '');
        l_Values := REPLACE(l_Values,
                            '=',
                            '=');
        l_Values := REPLACE(l_Values,
                            '|',
                            '|');
        l_Values := REPLACE(l_Values,
                            ':',
                            ':');
        RETURN(l_Values);
    END;
END;

 /*
取报文信息,不支持字段名(Pi_Fielna)中有特殊字符":=|"这4个字符
查找方式:
1、找出filed字段的起始值,必须是该字段前后为空、或者前后都必须为4个特殊字符,方能匹配
2、找出该filed是否有转义符,从filed字段后=处向前推转义符个数,拼成对应都转移字符串
3、从filed的=后一直匹配到第一个“转移字符+|”到字符,并且前后都没有转移字符为止,否则向后找,如果遍历完成后都没有,则返回空字符串
4、替换掉值中的转义符
*/
FUNCTION Get_Pkgstr(Pi_Fildna IN VARCHAR2, --字段名
                    Pi_Pkgstr IN VARCHAR2) --报文字符串
 RETURN VARCHAR2 IS
    --字段对应的值(如果是循环字段则返回第一个字段的值)
    l_Result    VARCHAR2(32767);
    l_Lisublen  INT;
    l_Lilen     INT;
    l_Lsstr     VARCHAR(32767);
    l_Lipos1    INT;
    l_Lipos2    INT;
    l_Fieldpos  INT; --字段field的起始位置
    l_Param     VARCHAR(255);
    l_Source    VARCHAR2(32767);
    l_Trans_Str VARCHAR(20); --转移字符串
BEGIN
    l_Source   := Ltrim(Rtrim(Pi_Pkgstr));
    l_Param    := Ltrim(Rtrim(Pi_Fildna));
    l_Result   := NULL;
    l_Lipos1   := 0;
    l_Lipos2   := 0;
    l_Lisublen := 0;
    l_Lsstr    := l_Source;
    l_Lilen    := Length(l_Source);
    l_Fieldpos := 0;
    BEGIN

        --取得l_param字段到精确位置
        l_Fieldpos := Field_Pos(l_Source,
                                l_Param);

        --无法取得字段
        IF l_Fieldpos <= 0 THEN
            --c_Trans_Char := ''; --转义字符
            l_Result := NULL;
            GOTO Oklable;
        END IF;

        --如果找到,则取值
        l_Lsstr := Substr(l_Lsstr,
                          l_Fieldpos,
                          l_Lilen);
        ----当前转移级次转义符字符串
        l_Trans_Str := Trans_Str(l_Source,
                                 l_Param,
                                 l_Fieldpos);
        l_Lipos1    := Instr(l_Lsstr,
                             l_Trans_Str || c_Name_Value_Delimiter) +
                       Nvl(Length(l_Trans_Str),
                           0); --c_Name_Value_Delimiter := '=' --字段值分隔符

        --确定值到结束
        l_Lipos2 := Value_Pos(l_Lsstr,
                              l_Trans_Str || c_Field_Delimiter);

        IF (l_Lipos2 > (l_Lipos1 + 1)) THEN
            l_Result := Ltrim(Rtrim(Substr(l_Lsstr,
                                           l_Lipos1 + 1,
                                           l_Lipos2 - l_Lipos1 - 1)));
            --dbms_output.put_line(l_result);
        ELSIF (l_Lipos2 = (l_Lipos1 + 1)) THEN
            l_Result := NULL;
        ELSIF (l_Lipos1 = 0 AND l_Lipos2 = 0) THEN
            l_Result := NULL;
        ELSE
            l_Result := Ltrim(Rtrim(Substr(l_Lsstr,
                                           l_Lipos1 + 1,
                                           l_Lilen)));
        END IF;
        GOTO Oklable;

        <<oklable>>

        RETURN(TRIM(Value_Notranc(l_Result)));
    END;
END Get_Pkgstr;

END Pkg_Pub;

时间: 2024-10-30 08:39:12

db2-把这个oracle存储转换成DB2储存过程,怎么转换。急!急!急!的相关文章

编程-hex16进制转换把EXE转换成文本,那如何转换回来?

问题描述 hex16进制转换把EXE转换成文本,那如何转换回来? 一个16kb的exe软件,通过hex转换成16进制的一堆字符例如0x40165.....这些字符是文本格式,现在这么把一堆字符重新转换成.exe可执行文件? 解决方案 全部都当二进制文件来读写,这样可以写回后,只要文件内容都对,那么修改后缀就可以执行了 解决方案二: 1.把这堆字符,每两位转化为一个字节,写回一个普通文件(文件名不要是任何可执行文件的文件名) 2.把文件名改为EXE 3.执行 没试过,不过应该是可行的吧

Java技术 汉字转换成拼音简码 和 汉字转换成五笔简码

问题描述 Java技术汉字转换成拼音简码和汉字转换成五笔简码例如输入:侃侃拼音简码:KK五笔码:WW有写好的类最好 解决方案 解决方案二:拼音的话网上有写好的包,五笔还是算了,没发现过解决方案三:这样都可以啊??学习中解决方案四:有些繁体拼音也不可以显示

如何将PDF转换成word文档完美转换

  迅捷PDF转换成Word转换器是上海互盾科技信息有限公司所研发的一款针对文件转换问题的多功能软件,软件具有八大转换模式:文件转Word.文件转Excel.文件转图片.文件转PPT.文件转换HTML.文件转TXT.图片转PDF.OFFICE转PDF(最新版支持任意文件格式转换),功能非常全面,用户只需一款软件在手,就可以轻松解决各种文件转换问题. 小编之所以向大家推荐迅捷PDF转换成Word转换器,主要是考虑到以下几个要素: 1) 具备高质量的PDF文件内容识别效果.拒绝错误识别,拒绝文件乱码

如何将pdf转换成word文档-pdf转换成word教程

如何将pdf转换成word文档?大家都知道,现在上网找一份资源相当的简单,大家直接在百度文库或新浪网盘中进行搜索,就可以找到各种各样的下载资源,然而有时候我们也会碰到一些问题.小编就拿之前遇到的事情举个例吧,当时小编想要找一份C语言题目的答案,当时搜索了好久终于找到了相关的下载资源,可下载下来小编突然发现,该资源是pdf格式的,小编很难直接对其内容进行复制利用,对此小编只能想办法将pdf转换成可编辑的word文档了.那么该使用什么方法呢? 当时小编通过朋友的介绍认识了迅捷PDF转换成Word转换

怎么把json串的格式转换成字符串,逗号间隔的形式,急

问题描述 {"user":["136376652947946","136376675478870"]}转换为136376652947946,136376675478870 解决方案 首先JSONObject jsonObj= JSONObject.fromObject("{"user":["136376652947946","136376675478870"]} ")

用sed语法将pt-query-digest分析的mysql慢查询转换成html页面,简单转换但是看着方便多了

主要练习sed的部分高级语法和正则匹配,不过其实用perl语法更方便.主要sed语法如下 #处理pt-query工具分析后的mysql慢查询 #头部 尾部 #!/bin/bash echo "used: sh chsqltohtml.sh abc.log,it will create abc.html to the current path" SLOWLOG=$1 INDEXHTML=`echo $SLOWLOG|cut -d . -f 1`.html echo $SLOWLOG ec

pdf怎么转换成word

pdf转换成word,免费pdf转换成word,在线pdf转换成word,pdf转换成word软件,pdf文件转换成word这是很多网 友经常问到的问题,pdf转换成word本不是一个技术活,利用一些小技巧和工具,其实你会发现pdf转换成word是很容易的,pdf转换成word方 法大全让你pdf转换成word非常轻松,而且是免费的. 1. pdf转换成word莫忘最基本的"复制/粘贴"法 寻找"高级"办法之前,不妨先试一下最基本的方法:打开PDF文档,复制全文;然

excel如何转换成pdf

excel如何转换成pdf 大家都知道,我们办公过程中建立各种表格都喜欢用excel软件,特别是那些人事部的同事,当我们将数据存储好之后,因为担心他人修改我们的数据,所以一些朋友会选择将excel文件转换成比较难以编辑的pdf文件.可是,excel如何转换成pdf呢? 对于2007版本及以上的excel软件,大家都知道可以加载一个生成PDF文件的工具,这个工具可以满足用户对excel文件转换的需求.这个工具的使用需要用户满足几点要求,一是软件版本是2007版本及以上,二是它必须加载了生成PDF的

pdf如何转换成word?

  目前网上有一些pdf转换成word的软件,在这里小编推荐大家使用迅捷pdf转换成word转换器,它是一款支持多种格式相互转换的万能pdf转换器软件,分别有word.excel.PowerPoint.图片.html.txt.pdf等格式,用户需要什么格式就选择相应的转换模式,操作非常的简单. 迅捷pdf转换成word转换器支持批量添加一键转换文件,用户只需将多个pdf文件同时添加到软件中,点击开始转换后只要等待片刻所有的pdf文件都会相应的转换成word文件,非常的方便,为用户节省了大量的精力