我们的综合信息平台在集成其他系统的时候,需要在数据库的基础表中初始化一些数据,但是这些数据需要遵守综合信息平台的一些规则。
以前,这样数据就不能直接导入,需要进行整理,在用户那里调整主键ID。主要是将其他系统的数据导入到Excel中,然后调整数据,拷贝到综合平台相应的数据表中。当数据量不是很大时,这样做还是可以的,但是当数据量很大时,这种方法就相对来说效率太差了。
最近,我同样遇到了这个问题,为了减少实施人员对数据的操作,我想使用脚本的方式,来解决这一问题。
首先,我将要导入到综合信息平台的数据先导入到临时表Tmp_SystemModule表中
- prompt PL/SQL Developer import file
- prompt Created on 2008年10月23日 by HopeStar
- set feedback off
- set define off
- prompt Creating TMP_SYSTEMMODULE...
- create table TMP_SYSTEMMODULE
- (
- F_MODULEID NUMBER(18) not null,
- F_MODULECODE VARCHAR2(50) not null,
- F_MODULENAME VARCHAR2(50) not null,
- F_ISDEFAULT NUMBER(18) not null,
- F_PARENTMODULEID NUMBER(18) default 0,
- F_NAVIGATEURL VARCHAR2(200),
- F_TARGET VARCHAR2(20),
- F_DEFAULTIMAGEURL VARCHAR2(200),
- F_SELECTEDIMAGEURL VARCHAR2(200),
- F_HOVERIMAGEURL VARCHAR2(200),
- F_TOOLTIP VARCHAR2(50) default ' ',
- F_REMARK VARCHAR2(200) default ' ',
- F_ORDER NUMBER(18) default 0,
- F_MODULEFLAG NUMBER(18) default 0,
- F_MODULEKEY VARCHAR2(50) default ' ' not null
- );
- commit;
- prompt Loading TMP_SYSTEMMODULE...
- insert into TMP_SYSTEMMODULE (F_MODULEID, F_MODULECODE, F_MODULENAME, F_ISDEFAULT, F_PARENTMODULEID, F_NAVIGATEURL, F_TARGET, F_DEFAULTIMAGEURL, F_SELECTEDIMAGEURL, F_HOVERIMAGEURL, F_TOOLTIP, F_REMARK, F_ORDER, F_MODULEFLAG, F_MODULEKEY)
- values (91, '1002', '设备管理', 0, 88, 'StandardScout/StandardForPlace/StandardBaseDevice/StandardDeviceManage.aspx', 'main', null, null, null, '设备管理', '设备管理', 91, 0, ' ');
- /*省略了添加的数据*/
- commit;
- prompt 1009 records loaded
- set feedback on
- set define on
- prompt Done.
其次,我要设计导入脚本,使临时表中数据符合综合信息平台对数据的要求
- variable SystemCode varchar2(200);
- variable CategoryID number;
- variable MinRange number;
- variable MaxRange number;
- accept Code prompt '请输入系统编码:';
- accept Min prompt '请输入系统所在范围的最小值:' number;
- accept Max prompt '请输入系统所在范围的最大值:' number;
- prompt
- prompt ========================================
- prompt 按<Enter>键继续
- prompt
- prompt ========================================
- prompt 添加系统
- prompt
- execute :SystemCode := '&Code';
- execute :MinRange := &Min;
- execute :MaxRange := &Max;
- insert into t_PortalSystem
- (f_SystemCode,f_ProjectName,f_SystemIP,f_AuthorityMethod,f_Port,f_SystemName,
- f_OuterCode,f_OverLoadFlag,f_Manufacturer)
- values
- (:SystemCode,:SystemCode,'192.168.0.24','SSO','80','测试变电站','NONE',0,'无');
- prompt
- prompt =========================================
- prompt 添加系统范围
- prompt
- insert into t_SystemRange
- (f_SystemCode,f_MinRange,f_MaxRange,f_IsEnabled)
- values
- (:SystemCode,:MinRange,:MaxRange,1);
- prompt
- prompt ========================================
- prompt 添加分类
- prompt
- execute :CategoryID := PKG_SystemModule.uf_CategorySequencesGet(:SystemCode);
- insert into t_PortalCategory
- (f_SystemCode,f_CategoryID,f_CategoryName)
- values
- (:SystemCode,:CategoryID,'变电站应用');
- commit;
- prompt
- prompt ========================================
- prompt 添加模块
- prompt
- INSERT INTO t_PortalModule
- (f_Categoryid,f_Moduleid,f_Modulename,f_Modulekey,f_Moduleurl,f_Moduletype,
- f_Displaytype,f_Description,f_Iconurl,f_IsTab,f_ValidateFlag,f_Order)
- select
- :CategoryID,PKG_SystemModule.uf_ModuleSequencesGet(:SystemCode),f_ModuleName,
- :SystemCode,f_NavigaterUrl,1,f_NavigateUrl,' ',0,0,f_Order
- from tmp_SystemModule;
- commit;
- prompt
- prompt ========================================
- prompt 删除临时表
- prompt
- drop table TMP_SYSTEMMODULE;
- commit;
- prompt ========================================
- prompt 同步完成
这样,实施人员只是设置了一些基础参数,就可以将大量数据导入到数据库中了,提高了数据的安全性。
总结:1、在实施过程中,应该尽量减少对数据库的操作。当必须要对数据操作时,程序应该尽可能多的提供操作界面
2、写实施脚本时,要多做些测试。