|
|
本帖最后由 niexingyu 于 2019-4-29 16:50 编辑
宁夏系统的成绩原存于正方系统,现学校需要将成绩导入教务数据库,下面是我导入成绩时遇到的一些问题与解决方案。
1.学校方面根据正方系统做出了一份学生成绩的视图,如图1所示,经过与教务成绩汇总表的导入模板(图2)比较发现某些字段与我们成绩汇总表的某些字段不一致,由于涉及到数据的处理,本人建了一个临时表把视图的查询内容插入到该表中,把他们视图里没有显示的选课选号字段加入了临时表,并修改表新增了我们所必需的一些字段,比如成绩汇总主键(cjhzzj),课程属性(kcsx),是否公选课(sfgxk),成绩及格线(cjjgx)等字段.
图1:学校根据正方教务数据库所生成的视图中的字段
图2:教务数据库的成绩导入模板
2.根据学生成绩汇总表的数据分析,原数据库的字段格式与教务数据库的字段格式不一样
图3:正方系统的选课课号与课程性质字段
1).原数据库的选课课号字段(xkkh)对应我们的课程编号(kcbh)
原数据库的选课课号是”学年学期-课程编号-学号-上课学期“的格式,但是我们只需要截取其中的课程编号,由于oracle不提供split函数支持,而课程编码的位数也不一致,查阅资料后发现使用substr与instr的组合可以实现对指定字符串的截取,sql:- SUBSTR (xkkh, INSTR (xkkh, '-', 1, 3)+1,(INSTR (xkkh,'-',1,4)-INSTR (xkkh, '-', 1, 3)-1)
复制代码 (截取第3个'-'后的字符串到第4个'-'前字符串的内容)由该sql可以截取到其中的课程编号
2).原数据库kcxz字段的值是包含了教务数据里课程性质(kcxz)与课程属性(kcsx)两个字段的,如图三中的2所示,而教务的数据库对课程性质与课程属性有更细致的区分,采用了编码规则将必修课,选修课,公共课,专业课一一划分,如图,本人在临时表中新增了一个kcsx字段把原kcxz字段复制到kcsx字段中,然后根据课程属性与课程性质代码集把其中的数据修改成对应的代码。
图4:课程性质代码 图5:课程属性代码
3).原学年字段数据与教务学年数据的格式问题
原学年字段格式为"2017-2018"格式,需要修改为”2017“这种格式,按照课程编号的修改方式修改学年字段即可。
3.查询出其中的重复数据
修改完对应的数据,将对应的学年学期课程编号学号字符串拼接生成一个主键,将其插入我们新增的cjhzzj字段中,由于该字段是我们成绩汇总表的主键,我们需要对其测试是否有重复数据,使用sql查询:select * from xscjb_emp where cjhzzj in (select cjhzzj from xscjb_emp group by cjhzzj having (count(cjhzzj)>1))(查询重复数据的所有信息);发现其中有重复的数据,把重复的异常数据筛选出来交给对应负责人,把剩下的正确数据导入教务数据库即可,本人采用的是dblink的方式,不需要再将数据导入导出,直接在数据库操作即可.sql: insert into cjgl_xscjhzb@DBLINK(cjhzzj ,xn,xq,xh,kcsx,kcxz,kcmc,kcbm,xf,jd,cj,bkcj,cxcj,sfgxk,cjjgx) select cjhzzj,xn,xq,xh,kcsx,kcxz,kcmc,xkkh,xf,jd,zpcj,bkcj,cxcj,sfgxk,cjjgx from xscjb_emp;,至此,数据导入完成,图6为修改完了数据临时表的查询结果.
图6:修改完成后的学生成绩临时表
以上即是本人导入宁夏成绩时遇到的一些问题的个人解决心得,希望与各位共同讨论,找出更高效的解决方法.
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|