⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prepare.4gl

📁 开发工具 Informix-4gl
💻 4GL
字号:
##############################################################
#/--@CLASS
#@DESC   业务端补丁安装预处理函数
#@AUTHOR 
#@CREATEDATE 2002/10/08
#@MODIFYLIST
# NAME     DATE          REASON
#-/
##############################################################
##############################################################
#/--@METHOD
#@DESC    补丁安装处理函数 
#@RETURN
#############################################################
DATABASE  a_prpins

FUNCTION patch_pre()
DEFINE lv_tab_sql        CHAR(1000),
       lv_part_sql       CHAR(1000),
       lv_col_sql        CHAR(1000)
DEFINE lv_tabid          INTEGER,
       lv_tabname        CHAR(18),
       lv_colname        CHAR(30)
DEFINE lr_tmpcontr RECORD           ##结构与sysconstraints,用来检查库中各表
                                    ##的主键是否同标准库一致
           tabname    CHAR(18),
           constrtype  CHAR(1),
           col1       CHAR(30),
           col2       CHAR(30),
           col3       CHAR(30),
           col4       CHAR(30),
           col5       CHAR(30),
           col6       CHAR(30),
           col7       CHAR(30),
           col8       CHAR(30),
           col9       CHAR(30),
           col10      CHAR(30),
           col11      CHAR(30),
           col12      CHAR(30),
           col13      CHAR(30),
           col14      CHAR(30),
           col15      CHAR(30),
           col16      CHAR(30)
       END RECORD

DEFINE la_colsname ARRAY[16] OF CHAR(30)
DEFINE i                 SMALLINT
DEFINE lv_err_mess       CHAR(100)
DEFINE lv_dbname         CHAR(20),
       lv_tab_text       CHAR(200)
DEFINE lv_result         SMALLINT

    LET lv_tabid = 0
    LET i = 0
    LET lv_result = 0
    INITIALIZE lv_tab_sql,lv_part_sql,lv_col_sql,lv_tabname,lv_colname,
               la_colsname,lr_tmpcontr,lv_err_mess,lv_dbname,lv_tab_text TO NULL

    --##检查数据结构是否为V1.5标准数据结构
    run ("patch/prepare/check_tab.sh") 

    LET lv_dbname=fgl_getenv("_PRPINSDB") 
    DATABASE lv_dbname
    --建临时表
    CREATE  TABLE tmpconstr
     (
      tabname    CHAR(18),
      constrtype  CHAR(1),
      col1       CHAR(30),
      col2       CHAR(30),
      col3       CHAR(30),
      col4       CHAR(30),
      col5       CHAR(30),
      col6       CHAR(30),
      col7       CHAR(30),
      col8       CHAR(30),
      col9       CHAR(30),
      col10      CHAR(30),
      col11      CHAR(30),
      col12      CHAR(30),
      col13      CHAR(30),
      col14      CHAR(30),
      col15      CHAR(30),
      col16      CHAR(30)
    );

    LET lv_tab_text = "echo \"load from patch/prepare/tmpconstr.unl insert into tmpconstr\"",
                      "| isql ",lv_dbname CLIPPED

    run (lv_tab_text)

    --检查数据是否满足1.5以后新加主键、索引的要求
    LET lv_tab_sql = " select tabname from tmpconstr"
    PREPARE pre_tabname FROM lv_tab_sql
    DECLARE curr_tabname CURSOR FOR pre_tabname
    FOREACH curr_tabname INTO lv_tabname

        --主键的检查
        INITIALIZE lv_part_sql TO NULL
        --从sysindexes表中取出colno
        LET lv_part_sql= "SELECT b.colname ",
                         "FROM systables a,syscolumns b,sysconstraints c,",
                              "sysindexes d",
                         " where a.tabname=\"",lv_tabname CLIPPED,"\"",
                         " AND a.tabtype=\"T\" AND a.tabid = b.tabid ",
                         " AND a.tabid=c.tabid AND a.tabid = d.tabid ",
                         " AND c.constrtype=\"P\" AND d.idxname = c.idxname" ,
                         " AND (b.colno = d.part1 OR b.colno = d.part2 ",
                         " OR b.colno = d.part3 OR b.colno = d.part4 ",
                         " OR b.colno = d.part5 OR b.colno = d.part6 ",
                         " OR b.colno = d.part7 OR b.colno = d.part8 ",
                         " OR b.colno = d.part9 OR b.colno = d.part10 ",
                         " OR b.colno = d.part11 OR b.colno = d.part12 ",
                         " OR b.colno = d.part13 OR b.colno = d.part14 ",
                         " OR b.colno = d.part15 OR b.colno = d.part16 )"

        PREPARE pre_idx_colno FROM lv_part_sql
        DECLARE curr_idx_colno CURSOR FOR pre_idx_colno
        LET i = 0
        INITIALIZE la_colsname,lr_tmpcontr TO NULL
        FOREACH curr_idx_colno INTO lv_colname
           LET i =  i +1
           LET la_colsname[i] = lv_colname
        END FOREACH

        SELECT * INTO lr_tmpcontr.* FROM tmpconstr
            WHERE (tabname = lv_tabname) AND (constrtype = "P")
        IF (la_colsname[1] = lr_tmpcontr.col1 
             OR (LENGTH(la_colsname[1])=0 AND LENGTH(lr_tmpcontr.col1)=0))
           AND (la_colsname[2] = lr_tmpcontr.col2  
             OR (LENGTH(la_colsname[2])=0 AND LENGTH(lr_tmpcontr.col2)=0))
           AND (la_colsname[3] = lr_tmpcontr.col3  
             OR (LENGTH(la_colsname[3])=0 AND LENGTH(lr_tmpcontr.col3)=0))
           AND (la_colsname[4] = lr_tmpcontr.col4  
             OR (LENGTH(la_colsname[4])=0 AND LENGTH(lr_tmpcontr.col4)=0))
           AND (la_colsname[5] = lr_tmpcontr.col5  
             OR (LENGTH(la_colsname[5])=0 AND LENGTH(lr_tmpcontr.col5)=0))
           AND (la_colsname[6] = lr_tmpcontr.col6  
             OR (LENGTH(la_colsname[6])=0 AND LENGTH(lr_tmpcontr.col6)=0))
           AND (la_colsname[7] = lr_tmpcontr.col7  
             OR (LENGTH(la_colsname[7])=0 AND LENGTH(lr_tmpcontr.col7)=0))
           AND (la_colsname[8] = lr_tmpcontr.col8  
             OR (LENGTH(la_colsname[8])=0 AND LENGTH(lr_tmpcontr.col8)=0))
           AND (la_colsname[9] = lr_tmpcontr.col9  
             OR (LENGTH(la_colsname[9])=0 AND LENGTH(lr_tmpcontr.col9)=0))
           AND (la_colsname[10] = lr_tmpcontr.col10  
             OR (LENGTH(la_colsname[10])=0 AND LENGTH(lr_tmpcontr.col10)=0))
           AND (la_colsname[11] = lr_tmpcontr.col11  
             OR (LENGTH(la_colsname[11])=0 AND LENGTH(lr_tmpcontr.col11)=0))
           AND (la_colsname[12] = lr_tmpcontr.col12  
             OR (LENGTH(la_colsname[12])=0 AND LENGTH(lr_tmpcontr.col12)=0))
           AND (la_colsname[13] = lr_tmpcontr.col13  
             OR (LENGTH(la_colsname[13])=0 AND LENGTH(lr_tmpcontr.col13)=0))
           AND (la_colsname[14] = lr_tmpcontr.col14  
             OR (LENGTH(la_colsname[14])=0 AND LENGTH(lr_tmpcontr.col14)=0))
           AND (la_colsname[15] = lr_tmpcontr.col15  
             OR (LENGTH(la_colsname[15])=0 AND LENGTH(lr_tmpcontr.col15)=0))
           AND (la_colsname[16] = lr_tmpcontr.col16  
             OR (LENGTH(la_colsname[16])=0 AND LENGTH(lr_tmpcontr.col16)=0))
        THEN
            LET lv_err_mess=lv_tabname CLIPPED,
                           " 表主键正确!                             "
            DISPLAY lv_err_mess AT 10,12 
        ELSE
            --"报告出错信息:"
            LET lv_err_mess=lv_tabname CLIPPED,
                           " 表主键不正确,请检查表结构!              "
           DISPLAY lv_err_mess AT 10,12 
           SLEEP 2
           CALL errorlog(lv_err_mess)
        END IF
        
    END FOREACH
    
    DISPLAY "                                                        " AT 10,12

    DROP TABLE tmpconstr;

    run (" test -s prpsetup.log ") returning lv_result    
    
    RETURN lv_result
END FUNCTION 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -