计算机审计方法语言编制规范
——计算机审计实务公告第13号
中华人民共和国审计署
二OO八年三月
目录
1.前言 4
2.引言 4
3.审计脚本语言(ASL) 4
3.1概述 4
3.2约束 4
3.3参数作用域 5
3.4常量 5
3.5变量 5
3.6数组 5
3.7
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式、运算符与界符 6
3.7.1算术运算符 6
3.7.2逻辑运算符 6
3.7.3关系表达式 6
3.7.4界符 6
3.8叙述语法 7
3.8.1 分支语句 7
3.8.2 WHILE循环 7
3.8.3 REPEAT-until循环 8
3.9过程 9
3.9.1过程定义 9
3.9.2过程的调用 9
3.10系统基本字(保留字) 10
3.11系统函数 12
3.12程序举例 15
4.Sql语句 20
4.1约束 20
4.2常用SQL数据库操作 20
4.3查询表 20
4.3.1 Select 语句 20
4.3.2 修改表 23
4.3.3 连接表 25
4.4常用SQL函数与表达式 27
4.4.1 聚合函数 27
4.4.2 字符串函数 28
4.4.3时间函数: 31
4.5常用函数对照表 31
计算机审计方法语言编制规范
1.前言
本规范由审计署计算机技术中心、信息化建设办公室提出。
本规范的起草单位:审计署计算机技术中心、信息化建设办公室。
2.引言
计算机审计方法语言包括ASL审计脚本语言和SQL语句两部分。
ASL审计脚本语言完成审计方法的流程控制。ASL审计脚本语言是由审计署基于PASCAL语言研制的适用于审计人员编制计算机审计方法的语言。
SQL语句完成对数据库的操作。本规范的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语言的子集,在此基础之上进行了数据库操作、图表输出等一系列功能扩展,其功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分。
3.2约束
(1)变量、标示符、函数及过程名称一律使用英文字母开头,可以使用英文和数字。
(2)变量、标示符、函数及过程名称大小写不敏感。
(3)一段程序中变量、过程不能超过100个。
(4)数字最大位数为24位。
(5)过程嵌套不超过3层。
(6)一行程序不超过5000个字符
(7)任何一段超过1行以上的程序需要使用begin….end语句进行约束,表明哪里是开始,哪里是结束。
(8)每行程序以分号作为结束符。
(9)全程序以end.作为结束
(10)变量定义要在主程序的begin之前。
(11)赋值语句使用:=为运算符
3.3参数作用域
过程可以引用自己定义的局部参数,也可以引用包围它的外过程定义的局部参数。
3.4常量
定义常量的格式:
CONST <常量标识符>=<常量>
说明:常量说明部分以关键字const开头, 后面的标识符为常量标识符,其中"="号后的常量为整数、实数、字符、 字符串(字符、字符串常量在后面章节中将作介绍)。而且,在常量说明部分可以将几个常量说明成符号常量,共用一个关键字"const"。
3.5变量
变量说明的格式:
VAR <变量标识符>[,<变量标识符>];
其中VAR是ASL保留字,表示开始一个变量说明段;
3.6数组
说明的格式:
array <数组标识符> [下标];
其中array是ASL保留字,表示开始一个数组说明段。
3.7表达式、运算符与界符
3.7.1算术运算符
算术运算符
说明
+
加号
-
减号
*
乘号
/
除号
3.7.2逻辑运算符
逻辑运算符
说明
=
等于
and
与
or
或
not
非
3.7.3关系表达式
关系表达式
说明
:=
等于号(赋值符、算术表达式)
<
小于
>
大于
<>、#
不等于
<=
小于等于
>=
大于等于
3.7.4界符
界符
说明
,
逗号,变量界符。用来分隔函数和过程的参数,以及声明变量时分隔变量
;
分号,语句界符。用来做为每一行程序段的结束标志
.
句号,程序界符。用来表示程序全部结束,一般使用在最后一个end后
( )
小括号,函数和过程的参数界符。
[ ]
中括号,数组下标的界符,定义数组时使用,一般中括号中间添入该数组的下标
‘’
单引号,字符串的界符,单引号中间一般为字符串。如果想单独输入一个单引号字符,则需要‘’’’。
//
注释符,注释符号,//后的本行文字不影响程序执行。
3.8叙述语法
3.8.1 分支语句
(1)格式
Ⅰ、IF <布尔表达式>THEN 语句;
Ⅱ、IF <布尔表达式>THEN 语句1 ELSE 语句2;
(注意Ⅱ型IF语句中语句1后无";"号)
(2)功能
Ⅰ、执行IF语句时,先计算<布尔表达式>的值,若为TRUE则执行语句,否则不执行任何操作。
Ⅱ、执行IF语句时,先计算<布尔表达式>的值,若为TRUE则执行语句1,否则执行语
3.8.2 WHILE循环
while语句的形式为:
while <布尔表达式> do <语句>;
其意义为:当布尔表达式的值为true时,执行do后面的语句。
while语句的执行过程为:
①判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4;
②执行循环体语句(do后面的语句);
③返回步骤1;
④结束循环,执行while的下一个语句。
说明:这里while和do为保留字,while语句的特点是先判断,后执行。 当布尔表达式成立时,重复执行do后面的语句(循环体)。
3.8.3 REPEAT-until循环
用while语句可以实现"当型循环",用repeat-until 语句可以实现"直到型循环"。repeat-until语句的含义是:"重复执行循环,直到指定的条件为真时为止"。
直到循环语句的一般形式:
Repeat
<语句1>;
:
<语句n>;
until <布尔表达式>;
其中Repeat、until是ASL保留字,repeat与until之间的所有语句称为循环体。
说明:
①repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。
②repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until是另一个语句。
③repeat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,不需用begin和end把它们包起来, repeat 和until已经起了begin和end的作用。while循环和repeat循环是可以相互转化的。
3.9过程
3.9.1过程定义
在pascal中,函数也遵循先说明后使用的规则,在程序中,函数的说明放在调用该函数的程序(主程序或其它子程序)的说明部分。函数的结构主程序的结构很相似。
procedure <过程名>; {过程首部}
说明:
过程首部以关键字procedure开头。
过程名是用户自定义的标识符,只用来标识一个过程,不能代表任何数据,因此不能说明"过程的类型"。
过程体的说明部分可以定义只在本过程有效的标号、常量、类型、变量、子程序等。
3.9.2过程的调用
过程调用是通过一条独立的过程调用语句来实现的,调用的一般格式为:
call <过程名>
3.10系统基本字(保留字)
系统基本字(保留字)
说明
调用举例
var
变量定义基本字,描述其后面的字符为定义的变量。
var a, x, mymun;
const
常量定义基本字,描述其后面的字符为定义的常量。
const pi=3.14159265;
array
数组定义基本字,描述其后面的字符为定义的数组。
array a[10], b[10];
procedure
过程定义基本字,描述其后面的字符为定义的程序过程。
var a;
procedure sum;
begin
a:=a+1;
write(a) ;
end;
begin
a:=1;
call sum;
end.
call
调用过程基本字,调用定义的一个过程。
begin
程序开始基本字,一段程序的开始标志。
var a, b;
begin
a:=1;
b:=2;
if a<>0 then
begin
b:=b+a;
write(b);
end;
end.
end
程序结束基本字,一段程序的结束标志。程序段结束end后面紧跟分号,全程序结束end后面紧跟句号。如过在if语句有else,则在else前的end不用跟随分号。
if
if-then-else判断基本字。
if 条件 then
begin
处理语句;
处理语句;
end
else
begin
处理语句;
处理语句;
end;
if a>0 then
write(‘a是正数’);
if a>0 then
write(‘a是正数’)
else
write(‘a是不是正数’);
if a>=0 then
begin
a:=a+1;
write(‘a是正数’);
end
else
write(‘a是负数’);
then
else
repeat
repeat-until循环基本字。repeat- until循环是直到until后的条件满足循环就停止
repeat
处理语句;
处理语句;
until 条件;
i:=0;
repeat
a:=i*i;
write(a);
i:=i+1;
until i>5;
until
while
while-do循环基本字
while 条件 do
begin
处理语句;
处理语句;
end;
b:=1;
while b<100 do
begin
a:=b*b;
if a>60000 then break;
b:=b+1;
end;
write(b);
do
break
循环中止基本字
read
录入基本字。
var a;
begin
read(a);
if a>0 then
write(‘a是正数’)
else
write(‘a是不是正数’);
end.
write
输出基本字。