从审计视角浅析解决商业银行数据库管理系统差异性
李博(审计署哈尔滨办)
【发布时间:2012年11月07日】
字号:【大】 【中】 【小】
    随着信息化的飞速发展,审计工作中计算机技术应用发挥着越来越重要的作用,如:提高审计工作精确性、加强审计工作管理、提升数据透明性和分享性等等。而数据库技术可以说是计算机审计中的核心技术,它是商业银行中最具有战略性的资产之一。但实际审计中发现,由于多种原因某些商业银行数据库管理系统不一致(包括ORACLE、 SQL SERVER、ACCESS等)。由于审计人员大多对SQL SERVER较为熟悉,所以需要将数据从ORACLE或ACCESS中导出文本、EXCEL或其它格式,然后再导入到SQL SERVER中利用SQL语句进行查询和分析。但现有银行数据库系统数据量较大,导入导出需要花费大量时间,由于不同数据库之间的差异性,在导入时还会碰到分隔符缺失,数据类型错误,格式错误等情况,导致数据分析难度加大,时间延长,效率降低,给审计工作造成不必要的麻烦。
    
    从审计视角解决上述问题,当遇到数据库系统不一致情况时,需要直接对不同数据库数据进行查询和分析,这样会节省大量时间,提高工作效率,下面笔者就某商业银行审计数据分析实例以供借鉴。
    
    在某商业银行进行调查,发现总行数据自200X年以后以ORACLE格式存储数据,200X年之前以SQL SERVER格式存储数据,而少数地方支行数据以ACCESS格式存储数据,要想查找出违法违规贷款数据,涉及客户姓名、贷款金额、审批时间等字段。审计中出现了以下问题并得到顺利解决。
    
    一、提取审批时间
    
    审批时间字段SPSJ格式为HH:MM:SS-YYYY:MM:DD,例:17:34:55- 2001:05:06,即2001年5月6日17时34分55秒,审计中需要提取出审批时间的年份,直接对ORACLE和SQL SERVER中数据审批时间SPSJ字段进行操作。在ORACLE中使用:substr( SPSJ , 10,4);在SQL SERVER中使用substring( SPSJ , 10,4);在ACCESS中使用mid( SPSJ , 10,4),即从SPSJ字段内容的第10个字符开始提取4个字符,将年份提取出来进行判断。
    
    二、合并客户姓和名
    
    客户姓名分成两个字段存储:KX(姓)和KM(名),在审计中需要将将两个字段连接组成完整的客户姓名字段KHXM。在ORACLE中使用:KHXM=KX||KM;在SQL SERVER中使用:KHXM=KX+KM;在ACCESS中使用KHXM=KX&KM,将姓和名连接之后才能正确显示客户姓名。
    
    三、数据类型转换
    
    审计中遇到此类问题较多。三种数据库中住房商业贷款的贷款金额字段DKJE和购房款总额GFKZE均为字符型数据,要想计算贷款成数(贷款成数=贷款金额/购房款总额),需要将两个字段转换成数值类型之后计算贷款成数再转换成字符类型方便显示。在ORACLE中使用:To_char(To_numeber(DKJE)/ To_numeber(GFKZE));在SQL SERVER中使用:cast((cast(DKJE as decimal(10,2)) / cast(GFKZE as decimal(10,2))) as varchar(20))或者Convert(varchar(20), (Convert(decimal(10,2), DKJE)/ Convert(decimal(10,2), GFKZ E)));在ACCESS中使用CStr(CDec(DKJE) /CDec(GFKZE))。
    
    四、根据法规政策规定的不同情况进行判断
    
    2010年4月《国务院关于坚决遏制部分城市房价过快上涨的通知》规定:(1)首套房:90平米以下的首付20%;90平米以上的首付30%。(2)二套房:首付款调整至50%以上,……。这就要求审计人员要针对不同情况查找出违法违规数据。在ORACLE中使用:若为首套房,(To_numeber(DKJE)/ To_numeber(GFKZE))< DECODE(ZFMJ, <=90,then 0.2,>90,then 0.3); 在SQL SERVER中使用:(cast(DKJE as decimal(10,2)) / cast(GFKZE as decimal(10,2)))<="90" CDec(GFKZE))    

    五、贷款申请时间和贷款发放时间间隔天数计算
    
    在审计中发现,某些客户向商业银行申请商业贷款到贷款发放时间间隔过短,甚至出现贷款发放时间早于贷款申请时间的情况,这就需要审计人员首先针对不同数据库系统筛选出此类数据,然后再具体调查原因。在ORACLE中使用:to_date(substr( DKSQSJ , 10,10), ‘yyyy-mm-dd’) - to_date(substr( DKFFSJ , 10,10), ‘yyyy-mm- dd’); 在SQL SERVER中使用:datediff(day, substring( DKSQSJ , 10,10), substring(DKFFSJ, 10,10));在ACCESS中使用:datediff ("d", mid( DKSQSJ , 10,10), mid(DKFFSJ, 10,10))。
    
    六、生成疑点数据
    
    对于需要延伸调查以确定其真实性的数据,需要生成新的数据表格,并取得当前系统时间便于标记和区分。
    在ORACLE中使用:Insert into 新表 数据来源,并取得当前系统时间:select sysdate for dual;在SQL SERVER中使用:Insert into 新表(数据来源),并取得系统时间: select Getdate();在ACCESS中使用:Insert into 新表(数据来源)并取得当前系统时间:select Now()。
    
    商业银行数据审计应用实例表明,在遇到数据库管理系统不一致情况时直接对其进行查询和分析,确实会省略大量数据导入导出步骤,避免由于导入导出而遇到的各种问题,节省大量时间因此而加快效率,提升审计效果。(李博)
【关闭】    【打印】