《计算机审计方法语言编制规范.doc》由会员分享,可在线阅读,更多相关《计算机审计方法语言编制规范.doc(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机审计方法语言编制规范计算机审计实务公告第13号中华人民共和国审计署二OO八年三月目录1前言52引言53审计脚本语言(ASL)53.1概述53.2约束63.3参数作用域63.4常量73.5变量73.6数组73.7表达式、运算符与界符73.7.1算术运算符73.7.2逻辑运算符83.7.3关系表达式83.7.4界符93.8叙述语法93.8.1 分支语句93.8.2 WHILE循环103.8.3 REPEATuntil循环113.9过程123.9.1过程定义123.9.2过程的调用123.10系统基本字(保留字)133.11系统函数183.12程序举例244.Sql语句314.1约束314.2
2、常用SQL数据库操作324.3查询表324.3.1 Select 语句324.3.2 修改表354.3.3 连接表374.4常用SQL函数与表达式394.4.1 聚合函数394.4.2 字符串函数404.4.3时间函数:434.5常用函数对照表44计算机审计方法语言编制规范1前言本规范由审计署计算机技术中心、信息化建设办公室提出。本规范的起草单位:审计署计算机技术中心、信息化建设办公室。2引言计算机审计方法语言包括ASL审计脚本语言和SQL语句两部分。ASL审计脚本语言完成审计方法的流程控制。ASL审计脚本语言是由审计署基于PASCAL语言研制的适用于审计人员编制计算机审计方法的语言。SQL语
3、句完成对数据库的操作。本规范的SQL语句采用国家标准GB_12991-91信息处理系统 数据库语言SQL及国际标准ISO/IEC 9075:1992信息技术 数据库语言 SQL 中审计所需的部分内容。为使计算机审计方法语言适用于SQL server、ORACLE、DB2等不同数据库,本规范在4.5节中列示了常用函数在SQL server、ORACLE、DB2等数据库使用中的对照表。3审计脚本语言(ASL)3.1概述审计脚本语言是基于PASCAL语言的基础之上开发一门专为审计人员书写审计方法的编程语言。审计脚本语言主体是PASCAL语言的子集,在此基础之上进行了数据库操作、图表输出等一系列功能扩
4、展,其功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分。3.2约束(1)变量、标示符、函数及过程名称一律使用英文字母开头,可以使用英文和数字。(2)变量、标示符、函数及过程名称大小写不敏感。(3)一段程序中变量、过程不能超过100个。(4)数字最大位数为24位。(5)过程嵌套不超过3层。(6)一行程序不超过5000个字符(7)任何一段超过1行以上的程序需要使用begin.end语句进行约束,表明哪里是开始,哪里是结束。(8)每行程序以分号作为结束符。(9)全程序以end.作为结束(10)变量定义要在主程序的begin之前。(11)赋值语句使用:=为运算符3.3参数作用域过程可以引用自
5、己定义的局部参数,也可以引用包围它的外过程定义的局部参数。3.4常量定义常量的格式:CONST =说明:常量说明部分以关键字const开头, 后面的标识符为常量标识符,其中=号后的常量为整数、实数、字符、 字符串(字符、字符串常量在后面章节中将作介绍)。而且,在常量说明部分可以将几个常量说明成符号常量,共用一个关键字const。3.5变量变量说明的格式:VAR ,; 其中VAR是ASL保留字,表示开始一个变量说明段;3.6数组说明的格式:array 下标;其中array是ASL保留字,表示开始一个数组说明段。3.7表达式、运算符与界符3.7.1算术运算符算术运算符说明+加号-减号*乘号/除号3
6、.7.2逻辑运算符逻辑运算符说明=等于and与or或not非3.7.3关系表达式关系表达式说明:=等于号(赋值符、算术表达式)大于、#不等于=大于等于3.7.4界符界符说明,逗号,变量界符。用来分隔函数和过程的参数,以及声明变量时分隔变量;分号,语句界符。用来做为每一行程序段的结束标志.句号,程序界符。用来表示程序全部结束,一般使用在最后一个end后( )小括号,函数和过程的参数界符。 中括号,数组下标的界符,定义数组时使用,一般中括号中间添入该数组的下标单引号,字符串的界符,单引号中间一般为字符串。如果想单独输入一个单引号字符,则需要。/注释符,注释符号,/后的本行文字不影响程序执行。3.8
7、叙述语法3.8.1 分支语句(1)格式、IF 布尔表达式THEN 语句;、IF 布尔表达式THEN 语句 ELSE 语句;(注意型IF语句中语句后无;号)()功能 、执行IF语句时,先计算布尔表达式的值,若为TRUE则执行语句,否则不执行任何操作。、执行IF语句时,先计算布尔表达式的值,若为TRUE则执行语句,否则执行语3.8.2 WHILE循环while语句的形式为:while do ;其意义为:当布尔表达式的值为true时,执行do后面的语句。while语句的执行过程为:判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4;执行循环体语句(do后面的语句);返回步骤1;结束循环,执
8、行while的下一个语句。说明:这里while和do为保留字,while语句的特点是先判断,后执行。 当布尔表达式成立时,重复执行do后面的语句(循环体)。3.8.3 REPEATuntil循环用while语句可以实现当型循环,用repeat-until 语句可以实现直到型循环。repeat-until语句的含义是:重复执行循环,直到指定的条件为真时为止。直到循环语句的一般形式:Repeat;:;until ;其中Repeat、until是ASL保留字,repeat与until之间的所有语句称为循环体。说明:repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。rep
9、eat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until是另一个语句。repeat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,不需用begin和end把它们包起来, repeat 和until已经起了begin和end的作用。while循环和repeat循环是可以相互转化的。3.9过程3.9.1过程定义在pascal中,函数也遵循先说明后使用的规则,在程序中,函数的说明放在调用该函数的程序(主程序或其它子程序)的说明部分。函数的结构主程序的结构很相似。procedure ; 过程首部说明: 过程首部以关键字procedure开头
10、。过程名是用户自定义的标识符,只用来标识一个过程,不能代表任何数据,因此不能说明过程的类型。过程体的说明部分可以定义只在本过程有效的标号、常量、类型、变量、子程序等。3.9.2过程的调用过程调用是通过一条独立的过程调用语句来实现的,调用的一般格式为:call 过程名3.10系统基本字(保留字)系统基本字(保留字)说明调用举例var变量定义基本字,描述其后面的字符为定义的变量。var a, x, mymun;const常量定义基本字,描述其后面的字符为定义的常量。const pi=3.14159265;array数组定义基本字,描述其后面的字符为定义的数组。array a10, b10;proc
11、edure过程定义基本字,描述其后面的字符为定义的程序过程。var a;procedure sum;begina:=a+1;write(a) ;end;begina:=1;call sum;end.call调用过程基本字,调用定义的一个过程。begin程序开始基本字,一段程序的开始标志。var a, b;begina:=1;b:=2;if a0 thenbeginb:=b+a;write(b);end;end.end程序结束基本字,一段程序的结束标志。程序段结束end后面紧跟分号,全程序结束end后面紧跟句号。如过在if语句有else,则在else前的end不用跟随分号。ifif-then-e
12、lse判断基本字。if 条件 thenbegin处理语句;处理语句;endelsebegin处理语句;处理语句;end;if a0 thenwrite(a是正数);if a0 thenwrite(a是正数)elsewrite(a是不是正数);if a=0 thenbegina:=a+1;write(a是正数);endelsewrite(a是负数);thenelserepeatrepeat-until循环基本字。repeat- until循环是直到until后的条件满足循环就停止repeat处理语句;处理语句;until 条件;i:=0;repeata:=i*i;write(a);i:=i+1;
13、until i5;untilwhilewhile-do循环基本字while 条件 dobegin处理语句;处理语句;end;b:=1;while b60000 then break;b:=b+1;end;write(b);dobreak循环中止基本字read录入基本字。var a;beginread(a);if a0 thenwrite(a是正数)elsewrite(a是不是正数);end.write输出基本字。3.11系统函数系统标示符说明调用举例LeftStr左截取字符串函数,输入要操作的字符串和截取的个数,返回左截取后的字符串。一个中文文字符占两位。leftstr(操作字符,个数) ;R
14、ightStr右截取字符串函数,输入要操作的字符串和截取的个数,返回右截取后的字符串。一个中文文字符占两位。rightstr(操作字符串,个数) ;MidStr中部截取字符串函数,输入要操作的字符串,起始位置和截取的个数,返回中部截取后的字符串。一个中文文字符占两位。MidStr(操作字符串,起始位置,个数) ;Length字符串取长度函数,输入要操作的字符串,返回该字符串的长度,一个中文字符占两位。一个中文文字符占两位。Length(操作字符串) ;CreateQ执行SQL语句,返回一个SQL语句的执行及结果到查询变两中。第一个参数是查询的SQL语句,第二个参数是使用过已经没有用的查询变量,
15、如果是第一次作查询则填写-1,这样做的好处是,节省查询变量的个数,节约资源。CreateQ(SQL语句,查询变量) ;a:=createq(select * from 凭证表,-1) ;a:=createq(select * from 凭证表,a) ;QEof查看查询变量当前指向的记录是否为空。返回1则表明为空。QEof(查询变量) ;a:=createq(select * from 凭证表,-1) ;b:=QEof(a);if b1 thenbegin/你的操作/你的操作end;QMov查寻变量记录移动函数,返回成功与否。QMov(查询变量,移动方向1向下-1向上) ;a:= createq
16、(select * from 凭证表,-1) ;b:=QMov(a,1) ;QFDValue取当前查询变量当前纪录的字段的值。入口参数一个是查询变量,一个是某一个字段的名称,需要用单引号括起来。QFDValue(查询变量, 字段名称) ;a:=createq(select * from 凭证表,-1) ;b:=QFDValue(a, 摘要) ;RecordNum如果参数为一个打开的查询变量,则取出当前查询变量的记录个数。如果参数为数据库中的一个表名,则取出该表的所有记录个数。RecordNum(查询变量或表名称) ;ExecuteUpdate执行数据库插入、更新、删除(Insert,Updat
17、e,Delete)的SQL语句的函数。ExecuteUpdate(SQL语句) ;CreateTempTable把SQL语句取出来的结果以用户输入的表名存储在数据库中。CreateTempTable(新表名, SQL语句);OPutChart将查询变量或SQL语句结果输出到图表。Y轴字段显示颜色参数:clred红色、clblue蓝色、clyellow黄色、clgreen绿色、clMaroon栗色、clPurple紫色、clFuchsia紫红色、clOlive橄榄色、clSkyBlue天蓝色、clMoneyGreen货币绿色、clLime亮绿色。或者直接使用颜色数字,格式为$加6位的16进制数字
18、。如:$1f11c1。OPutChart(查询变量或SQL语句, X轴字段,Y轴字段1,显示颜色参数1; Y轴字段2,显示颜色参数2;Y轴字段N,显示颜色参数N) ;AddVouDout输出源凭证号到疑点库中,该源凭证号对应的凭证将被定义为已落实疑点。AddVouDout(源凭证号) ;AddVouRslt输出源凭证号到疑点库中,该源凭证号对应的凭证将被定义为未落实疑点。AddVouRslt(源凭证号) ;AddTransDout把指定查询变量的当前记录输出到业务疑点的临时库中。AddTransDout(查询变量, 疑点说明);AddTransRslt把指定查询变量的当前记录输出到业务结果的临
19、时库中。AddTransRslt(查询变量, 疑点说明);TransBatch把指定查询变量的业务疑点或结果临时库中的数据写入业务疑点或结果库中。并清空相应的临时库中的数据TransBatch(查询变量, 批量疑点说明);showmsgshowmsg(消息内容);3.12程序举例(1)赋值语句/定义变量并且为变量赋值和输出变量const pi=3.14159265;/常量赋值VarInputNumber,InputString,CurrentQuery;Array InputArrary10;BeginInputNumber:=123; /数值赋值InputString:=ABCDEFG;/字
20、符串赋值InputArrary1:=abc; /数组赋值CurrentQuery:=CreateQ(select * from 凭证库,-1);ShowMsg(InputNumber);ShowMsg(InputString);ShowMsg(InputArrary1);End.(2)判断语句/脚本说明:/输入一个数判断输入的数字是否为正数,正数显/示你输入的数为正数负数显示你输入的数为负数VarInputNumber;beginRead(InputNumber);if InputNumber0 thenbeginif InputNumber0 thenbeginShowMsg(你输入的是正数
21、);endelsebeginShowMsg(你输入的是负数数);end;endelsebeginShowMsg(你输入的是零);end; end.(3) 循环语句/提示用户输入一个数字,如果输入的数是负数停止/循环否则将输入的数字累加并在最后将累加结果显示VarInputNumber,TotalNumber;Procedure DoCycle;BeginTotalNumber:=0;Read(InputNumber); / 输入一个数字while InputNumber0 do / 循环条件输入的数字是正数BeginTotalNumber:=TotalNumber+InputNumber; /
22、累加输入的数字Read(InputNumber);/ 输入一个数字End; End;/主程序BeginCall DoCycle; / 调用过程ShowMsg(TotalNumber); / 显示累计结果End.(4)数据库操作/读取凭证库中的一月份凭证,计算一类,五类科/目,2,3,4类科目总数并显示/对于凭证号为1的凭证放在未落实疑点为2的放/到已落实疑点varCurrentQuery,IsEmpty,AccountCode,Total1,Total2,VoucherNum,SourceVoucherNum;beginTotal1:=0;Total2:=0; CurrentQuery:=Cr
23、eateQ(select * from 凭证库 where 会计月份=1,-1);IsEmpty:=Qeof(CurrentQuery);if IsEmpty1 thenbeginrepeatAccountCode:=QFDValue(CurrentQuery,科目编码);AccountCode:=LeftStr(AccountCode,1);if AccountCode=1 or AccountCode=5 thenbeginTotal1:=Total1+1;endelsebeginTotal2:=Total2+1end;IsEmpty:=Qmov(CurrentQuery,1);IsEmp
24、ty:=Qeof(CurrentQuery);VoucherNum:=QFDValue(CurrentQuery,凭证号);if VoucherNum=1 thenbeginSourceVoucherNum:=QFDValue(CurrentQuery,源凭证号);AddVouDout(SourceVoucherNum);end;if VoucherNum=2 thenbeginSourceVoucherNum:=QFDValue(CurrentQuery,源凭证号);AddVouRslt(SourceVoucherNum);end;until IsEmpty=1;end;write(Tota
25、l1);write(Total2);ShowMsg(Total1);end.(5)字符串操作varTestString,ResultStr,LengthStr;beginTestString:=ABCDEFG;ResultStr:=LeftStr(TestString,1);ShowMsg(ResultStr);ResultStr:=RightStr(TestString,1);ShowMsg(ResultStr);ResultStr:=MidStr(TestString,1,4);ShowMsg(ResultStr);ResultStr:=TrimStrEX(TestString,CD,DC
26、);ShowMsg(ResultStr);LengthStr:=Length(TestString);ShowMsg(LengthStr);end.(6)图形输出/用户输入科目编码对当前输入的科目编码按月份/汇总借贷金额以图表方式输出varCurrentQuery,x; beginRead(x);CurrentQuery:=CreateQ(SELECT 会计月份,SUM(借方金额) AS J,SUM(贷方金额) AS D FROM 凭证库 WHERE LEFT(科目编码,4) =+x+ GROUP BY 会计月份,-1);oputchart(CurrentQuery,会计月份,J,clred;
27、D,clgreen); end.4.Sql语句4.1约束在计算机审计方法语言中的SQL语句只支持数据定义语言(DDL,Data Definition Language)、数据操纵语言(DML,Data Manipularion Language)、数据控制语言(DCL,Data Control Language)和系统存储过程(System Stored Procedure)中的数据定义语言和数据操纵语言。4.2常用SQL数据库操作4.3查询表4.3.1 Select 语句Select语句从一个或多个表中检索数据(1)语法SELECT ALL | DISTINCT Column express
28、ion AS name | * FROM , WHERE GROUP BY Columns Having conditionSelect 语句查询sql数据,返回一个由在From子句中所指的表导出的结果表。结果表的导出可以描述为一个操作的序列,每一个操作的结果被输入到下一个操作。这个操作序列是From子句,然后是WHERE、GROUP BY、HAVING 和选择清单(即列表达式的清单),而对这些子句的描述也以这个顺序出现。From子句Form子句为查询提供一个语法FROM ,WHERE 子句可选项WHERE子句用于设置对于行的检索条件。不在规定范围内的任何行都从结果表中去除。规定的搜索条件必须
29、含有算术和布尔运算符、sql判断和Sql标量函数,以及设置运算顺序的括弧。语法 WHERE GROUP BY 子句GROUP BY 子句逻辑上将由WHERE 子句返回的结果集重新编组。语法 GROUP BY ALL group_by_expression ,.n WITH CUBE | ROLLUP HAVING 子句可选行HAVING子句用于为组设置检索条件。不在规定范围内的任何组都从结果集中去除。规定的搜索条件必须含有算术运算符、布尔运算符、SQL判断和SQL标量函数,以及设置运算顺序的括弧。语法HAVING Case 子句:计算条件列表并返回多个可能结果表达式之一FunctionSpec
30、ify a conditional value.Format :=| :=NULLIF | COALESCE . :=| :=CASE . END :=CASE. END := WHEN THEN := WHEN THEN := ELSE := := := | NULL := 4.3.2 修改表(1)ALTER语句ALTER TABLE更改一个基本表的定义。语法ALTER TABLE :=ADD COLUMN |ALTER COLUMN SET DEFAULT default value |ALTER COLUMN DROP default |ALTER COLUMN ADD SCOPE |A
31、LTER COLUMN ADD SCOPE RESTRICT|CASCADE|ALTER COLUMN RESTRICT|CASCADE|ADD |DROP CONSTRAINT RESTRICT|CASCADE(2)INSERT语句将新行添加到表。语法INSERT INTO ( ,) OVERRIDE SYSTEM GENERATED VALUES INSERT INTO ONLY DEFAULT VALUES(3)UPDATE语句更改表中的现有数据。语法 UPDATE ONLY SET =scalar_ expression,= scalar_ expression|ROW=row_ ex
32、pression WHERE (3)DELETE语句从表中删除行。语法DELETE FROM ONLY WHERE 4.3.3 连接表连接表是指由笛卡尔积(交叉连接)、自然连接、内连接、外连接和联合连接得到的表语法: CROSS JOIN | NATURAL JOIN |():=INNER|LEFT | RIGHT|FULL OUTER |UNION=:ON |USING ( join , join )笛卡尔积(交叉连接) 分为显式和隐式两种,不带ON子句,返回的是两表的乘积。隐式的交叉连接,使用“,”连接表。显式的交叉连接,使用”CROSS JOIN” 连接表。内连接内连接(INNER JO
33、IN) 形成的中间表为两个表经过ON条件过滤后的笛卡尔积。自然连接(NATURAL INNER JOIN)自然连接无需指定连接列,SQL会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用ON语句,不允许指定显示列,显示列只能用*表示对于每种连接类型(除了交叉连接外),均可指定NATURAL。外连接(OUTER JOIN)外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下
34、:左外连接还返回左表中不符合连接条件单符合查询条件的数据行。右外连接还返回右表中不符合连接条件单符合查询条件的数据行。全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。联合连接(UNION JOIN)找出全外连接和内连接之间差异的所有行。4.4常用SQL函数与表达式4.4.1 聚合函数AVG返回组中值的平均值。空值将被忽略。语法AVG ( ALL | DISTINCT expression ) COUNT返回组中项目的数量。 语法COUNT
35、 ( ALL | DISTINCT expression | * ) MAX返回表达式的最大值。语法MAX ( ALL | DISTINCT expression )MIN返回表达式的最小值。 语法MIN ( ALL | DISTINCT expression ) SUM返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略。语法SUM ( ALL | DISTINCT expression ) 4.4.2 字符串函数(1)字符子串函数返回字符串的一部分语法: := SUBSTRING ( FROM FOR )(2)字符整理函数 去除尾端或首端的或是首端和
36、尾端的整理字符。语法:trim function := TRIM ( ) := FROM := := LEADING | TRAILING | BOTH := (3)对换函数 将字母在大小写之间进行转换fold := UPPER | LOWER ( )(4)字符翻译函数将字符串中的每个字符转换为其他字符集的等效字符。 := TRANSLATE ( USING )(5)使用形式转换函数将字符串中的每个字符转换为其他等效字符。 := CONVERT ( USING )(6)字符位置表达式返回制定字符在字符串中的位置:=POSITION (character value expression_1 IN character value ex