设为首页 加入收藏

TOP

使用java将COBOL语句转化为标准SQL语句的方法(一)
2017-12-24 06:07:09 】 浏览:514
Tags:使用 java COBOL 语句 化为 标准 SQL 方法

需求

项目组接到一个需求,需要将COBOL语句写的东西,和公司的数据字典对比,然后形成一个标准SQL语句,然后和我们项目组的数据表结构来做对比,找出差异。
1.COBOL语句

******************************************************************        
      * COBOL DECLARATION FOR TABLE CLTGOGA2                          *        
      ******************************************************************        
      01  CLR:GOGA2:.                                                          
          03 :GOGA2:_KEY.                                                      
              05 :GOGA2:_COLL_NO  DIC(GTEE_NO, P).                            
          03 :GOGA2:_R_TYPE      DIC(TYP).                                    
                88 :GOGA2:_R_N          VALUE 'N'.                            
                88 :GOGA2:_R_D          VALUE 'D'.                            
          03 :GOGA2:_GUAR_CI_NO  DIC(CI_NO).                                  
          03 :GOGA2:_GUAR_ENG_NAME DIC(CI_ENM).                                
          03 :GOGA2:_REF_NO      DIC(DESC_30).                                
          03 :GOGA2:_CAN_DATE    DIC(DT, P).                                  
          03 :GOGA2:_GOVER_GUAR_PCT DIC(PCT, P).                              
          03 :GOGA2:_EFF_DATE    DIC(DT, P).                                  
          03 :GOGA2:_EXP_DATE    DIC(DT, P).                                  
          03 :GOGA2:_GUAR_TYP    DIC(PRDMO_CD).                              
          03 :GOGA2:_PREM_TYP    DIC(FLG).                                    
          03 :GOGA2:_CRT_DATE    DIC(DT, P).                                  
          03 :GOGA2:_CRT_TLR      DIC(TLR_NO).                                
          03 :GOGA2:_UPDTBL_DATE  DIC(DT, P).                                  
          03 :GOGA2:_UPDTBL_TLR  DIC(TLR_NO).                                
          03 :GOGA2:_TS          PIC X(26).                                  
      *@*CHECKSUM _2115642531                      

2 数据字典

ABBR_CD,X,2,0AC,X,25,0
AC-NAME,M,61,0
AC_ARR,X,990,0
AC_EXP,X,2,0
AC_MODEL,X,6,0

3 转化的结果

DROP TABLE ODS.CITGID;
CREATE TABLE ODS.CITGID (
GRP_ID CHAR(10) DEFAULT ' ' NOT NULL,
CI_NO CHAR(12) DEFAULT ' ' NOT NULL,
FLG CHAR(1) DEFAULT ' ' NOT NULL,
GRP_NAME CHAR(140) DEFAULT ' ' NOT NULL,
CREATE_UNIT DECIMAL(6,0) DEFAULT 0 NOT NULL,
CREATE_TLR CHAR(8) DEFAULT ' ' NOT NULL,
CREATE_DATE DECIMAL(8,0) DEFAULT 0 NOT NULL,
CREATE_TIME DECIMAL(6,0) DEFAULT 0 NOT NULL,
CHK_STATUS CHAR(1) DEFAULT ' ' NOT NULL,
LAST_UPD_DATE DECIMAL(8,0) DEFAULT 0 NOT NULL,
UPDTBL_DATE DECIMAL(8,0) DEFAULT 0 NOT NULL,
TS CHAR(26) DEFAULT ' ' NOT NULL,
PRIMARY KEY(GRP_ID, CI_NO)
)
IN TBS_REPORT_DATA INDEX IN TBS_REPORT_INDEX COMPRESS YES;

分析

语言使用java,里面大概涉及到文件流的处理,怎么读文件,怎么写文件,怎么将文件和数据字典对比,之后将形成的整个文件拆分,形成一个个独立的表文件。我的处理是这样的,首先将COBOL语句转化为一个临时文件,每一行的字符串用切割符分开,之后和数据字典对比,然后形成一个大文件,最后用shell脚本将大文件切割一个个表结构。#代码1.ConverSqlToTxt.java 将COBOL语句转为用 ! 切割的字符串

/**
    * @param lineChar 处理03和05开头的字符串
    * @return 符合规范的字符串
    */
    private String checkSqlTabFiled(String lineChar) {
        String str = "";

        String[] splited = lineChar.split("\\s+");
        if (splited[1].contains(":")) {
            splited[1] = splited[1].replace(":", "").trim();
        }

        //去掉第二个数开头的表名
        if (splited[1].contains("_")) {
            String tabName = splited[1];
            //得到tabName截掉前三位的字符串
            tabName = tabName.split("\\_{1}")[0];
            splited[1] = splited[1].replaceFirst(tabName + "_", "").trim();
        }

        if (splited.length == 4) {
            if (splited[2].contains(",") && splited[2].contains("(") && splited[3].contains(")")) {
                splited[2] = splited[2] + splited[3];
                List
  
    list = new ArrayList
   
    (); for (int i = 0; i < splited.length; i++) { list.add(splited[i]); } //去掉第四位的数组 list.remove(3); splited = list.toArray(new String[1]); } } if (splited.length == 3) { str = splited[0] + "!" + splited[1] + "!" + splited[2]; } else if (splited.length == 4) { str = splited[0] + "!" + splited[1] + "!" + splited[2] + "!" + splited[3]; } else if (splited.length == 6 && splited[1].equals(sevenNumber)) { str = splited[0] + "!" + splited[1] + "!" + splited[3] + "!" + splited[4] + "!" + splited[5]; } re
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇sqlserver登录名和用户名的区别和.. 下一篇Reids内存优化教程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目