📄 prepare.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 + -