INFORMIX4GL新手进阶整理.docx
- 文档编号:23812297
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:21
- 大小:817.05KB
INFORMIX4GL新手进阶整理.docx
《INFORMIX4GL新手进阶整理.docx》由会员分享,可在线阅读,更多相关《INFORMIX4GL新手进阶整理.docx(21页珍藏版)》请在冰豆网上搜索。
INFORMIX4GL新手进阶整理
INFORMIX--4GL新手进阶整理
模块包括一个或多个函数的集合。
函数(function)是INFORMIX-4GL代码最基本的单元,它是在被调用时执行的一组INFORMIX-4GL语句序列。
在INFORMIX-4GL程序中函数一次也没执行过也是有可能的,例如,如果从没删除过客户,那么函数delete_cust就不会被调用
函数类型
在INFORMIX-4GL中有四种函数,不同的函数名表示不同种类的INFORMIX-4GL语句功能。
GLOBALS:
在这个函数只用于说明变量声明语句,它也让其它模块知道变量的存在,每个程序只允许有一个GLOBALS函数。
MAIN:
给出INFORMIX-4GL开始的位置,INFORMIX-4GL首先总是先读MAIN函数,MAIN函数驱动程序的其余部分,因此,每个程序要有一个MAIN函数(否则INFORMIX-4GL不知从哪儿开始)执行。
REPORT:
它是附加的报表格式化语句,其它的函数如MAIN、GLOBALS和FUNCTION不能处理报表语句。
FUNCTION:
这是INFORMIX-4GL代码的基本单元,它不象MAIN和GLOBALS有特殊用处,定义一个函数的目的是什么它就做什么。
第二章INFORMIX-4GL的处理逻辑
有六种:
IF、CASE、WHENEVER、WHILE、FOR、FOREACH
判断和循环语句
INFORMIX-4GL有一组判断和循环语句,它用于程序在执行时决定执行的顺序。
判断逻辑:
分支
同其它语言一样,INFORMIX-4GL提供了随变量条件而执行相应语句的方法。
用IF…THEN…语句可以根据一定的条件做相应的动作。
例如:
当用户输入错误时可以显示特定的错误信息。
给IF…THEN…语句加入ELSE子句,可以描述一个测试条件不满足时的可选动作。
有可能的话,多个IF语句可以嵌套使用,可以把一组相关的动作放在一个语句里。
CASE语句也可以完成这一功能。
IF语句
IF…THEN…[ELSE]用于测试值为TRUE或FALSE的表达式。
IF语句是执行条件语句的指令。
它包括两条逻辑选择。
在程序执行过程中,当测试条件为TRUE,INFORMIX-4GL执行跟在保留字THEN后面的语句,并以ENDIF或ELSE保留字为结尾。
若有ELSE子句,在测试条件为FALSE(或NULL)时,INFORMIX-4GL才执行ELSE子句。
嵌套IF语句
IF语句可以嵌套在IF语句中,常见的错误是忘了写ENDIF保留字或在嵌套IF语句中,IF和ENDIF不匹配。
这种情况下编译时会出现错误信息,提示一般语法错误。
CASE语句:
CASE语句可以减少多重IF语句。
它常用于在一个语句中表示连贯相关的选择判断。
判断:
WHENEVER
WHENEVER语句在INFORMIX-4GL语句执行过程中用于捕获错误和例外情况。
WHENEVER是个编译开关(CompilerSwith),编译开关或编译指令并不在程序运行过程中执行,是在处理代码时改变编译模式。
WHILE循环
用WHILE循环在状态布尔表达式值为TRUE时一直执行循环体语句或语句组。
EXITWHILE语句把程序控制权转到ENDWHILE后的第一个语句处执行。
CONTINUEWHILE语句中断循环体语句序列,并把程序控制权返回给循环体头部,并测试布尔表达式值。
若布尔表达式值为FALSE,程序控制跳过剩余的循环。
FOR循环
用FOR循环可以指定迭代的次数。
若用了带整型表达式的STEP保留字。
循环步长按STEP中指定的值增加。
因为整型表达式可以是一个变量,所以可以动态地设置循环总数。
第三章INFORMIX-4GL中的数据类型
CHAR字段(character)存储任意字母、数字和符号的组合。
存储的数据可以是名字、地址、社会安全号码、电话号码和其它由字母、数字、标点及其它符号组成的信息。
在多数应用中,CHAR是常用的数据类型,它占用了大部分磁盘空间。
CHAR字段的最大长度是32767字节。
CHAR是固定长度的,若定义字符字段为400字节,即使数据小于400字节,这个字段在磁盘上也要占够空间数。
有五种数字类型字段,每种表示不同类型的数字。
数字字段不能存放字符或符号,但是,加(+)和减(-)可放在数字字段用于表示正、负。
在小型应用中两者的区别可能不明显,但在大型应用中有本质的区别。
FLOAT和SMALLFLOAT这两种数据类型存储二进制浮点数,用于科学计算。
这两种数据类型的精度:
●FLOAT双精度。
14位有效数字
●SMALLFLOAT单精度。
7位有效数字
FLOAT可以存储SMALLFLOAT类型数据的两倍。
FLOAT字段不是存放大数据,而是存放高精度数据。
DECIMAL存储用户指定的带小数点数字。
最高为32位数字。
DECIMAL数字可以用给定的精度和标尺显示。
● 精度是整个数字的位数
● 标尺是小数点右边的数字个数
定义为(5,2)的DECIMAL字段可以存储小数点前3位整数,小数点后2位小数的5位数字数据。
精度和标尺是可选项。
● 无精度时:
DECIMAL可看作是DECIMAL(16),即16位精度的浮点数。
● 无标尺时:
DECIMAL可看作是一个浮点小数。
DECIMAL可以是高精度数且能对数字进行四舍五入。
FLOAT表示的精度因机器的不同而不同,这在网络数据传输中会有影响。
MONEY存储货币金额。
金额以前导$表示。
它可以描述类似DECIMAL数据类型的高达32位的数字。
同DECIMAL一样,MONEY字段要给定精度和标尺。
它是固定长度的。
MONEY字段没有给定精度和标尺时缺省的是DECIMAL(16,2)。
占用的磁盘空间缺省是八位。
这比大部分应用所需的高。
你可以定义MONEY字段所需的最大范围来节省磁盘空间。
若需要,以后还可以增加。
SERIAL字段是系统分配给表中每行INTEGERS存储字段的唯一值。
当行增加时,其值按序增加。
缺省起始数为1,最大值为二十一亿。
一个表中只能有一个SERIAL字段且这个字段一般为主键(PK)。
程序变量不能是SERIAL数据类型。
若起始数设为100,则加入的第一行序列值为100。
不要试图在分配了SERIAL后改变其值。
SERIAL值是不能用UPDATE语句修改的。
尽管它可以修改SERIAL数,但是不方便也是不必要的,如果程序不得不维护一系列连续的审计ID号,就要用别的方法来产生。
当一行或多行被删除,虽然数据被移走,但SERIAL值仍然增加,因此,当新增一行时,仍然分配序列的下一个数。
SERIAL数是不能重复利用的。
DATE数据类型用于存储日历数,当日期以INTEGERS存储时,DATE数据可以用上图所列的任意格式插入DATE字段。
DATE数据类型是从1899年12月31日往后开始的,即1900年1月1日是第一天。
DATETIME数据类型用于存储表示时间点的值。
它使得精度更高且选择点更细。
DATETIME精度范围大可以到年,小到计算机时间片的秒。
DATETIME优于DATE数据类型。
它定义了从年到时间片秒的时间点。
DATETIME(1990-4-2412:
00)YEARTOMINUTE
DATETIME(1612:
23)DAYTOMINUTE
DATETIME(31.234)SECONDTOFRACTION
DATETIME数据项可以是公元1年到公元9999年之间的任一时间点。
INTERVAL数据类型用于存储一个时间段。
如上图,第一个INTERVAL表示89年零8个月,第二个INTERVER表示560天零2小时25秒。
例如:
INTERVAL(5-3)YEARTOMONTH
INTERVAL(11:
15)HOURTOMINUTE
INTERVAL数据项可以表示大到9999年零1个月或小到时间片秒。
INTERVAL数据类型不能即包括月又包括日,这是因为月中的天数是随月份不同而不同的,如3月是31天,而9月是30天。
每年月份中的天数也是不同的,二月份的天数每四年从28天到29天变一次。
因为日历上的不同,ANSI把INTERVAL类型分成两个子类:
年—月型INTERVAL和日期—时间型INTERVAL。
INFORMIX-OnLine引擎允许在字段中存储变长字符类型,这个类型叫VARCHAR。
用VARCHAR的主要好处是,它可以增加存储在磁盘上每页的行数,提高读表的性能。
VARCHAR与CHAR数据类型字段相比,它减少了磁盘浪费。
VARCHAR字段可以存储0~255位字符数据,当定义VARCHAR数据类型时,要定义字段的最大长度。
开发者可以根据性能需要指定一个最小的长度。
max-size参数设置了数据项中允许输入的最长字符限制。
min-size参数设置了占用的最小磁盘空间。
第四章定义程序变量
DEFINE语句的放置位置决定了变量的范围。
把DEFINE放在Global函数中,使其它所有函数都能使用该变量。
这个变量是全局的。
●在其它模块中调用Globals:
要在其它模块中调用Global部分,必须让其它模块知道这个Global部分。
●在第一个函数外部定义变量:
在cust_main.4gl中,DEFINE语句放在了global调用后面,但在MAIN之前。
这给变量以模块级范围。
要使变量有模块范围,必须把DEFINE语句作为global调用后的第一个语句。
●在函数内部:
若DEFINE放在FUNCTION保留字后面,它就具有局部范围。
函数保留字包括MAIN、FUNCTION和REPORT。
若变量是局部范围的,它只能在定义它的函数内部使用。
若要把函数定义为局部的,DEFINE语句必须放在FUNCTION保留字之后。
在其它函数中要用到局部变量的值,可以通过传值传给哪个函数。
有三种类型的范围:
全局范围(Global)--所有模块或函数都可以使用该元素
模块范围(Module)--元素声明或定义的模块中的所有函数都可以使用该元素
局部范围(Local)--只有定义或声明该元素的函数可以使用该元素
变量命名规则:
●可以是1~8位字符长
●前八个字符必须唯一
●必须以字母开头
●可以包括字母、数字和下划线(_)
●可以是大写或小写字母
●若变量名同数据库、表或字段名一样,程序会把它作为变量。
若希望把它作为数据库、表或字段的名字,要在前面加上@符号。
DEFINE后跟记录名,记录名用于表示它后面的一组变量。
RECORD保留字后跟变量列表,在最后放ENDRECORD保留字。
因为变量的名字和数据类型都出现在声明中,所以是显式定义。
它的命名规则同变量命名规则。
要调用记录成员,必须在变量前加记录名,如:
c_name.fname
下面是调用记录所有变量的简写方式:
c_name.*其中*表示记录c_name中的所有变量。
在DEFINE后跟变量名,数据类型通过保留字LIKE后跟table.columnname(表.字段名)分配。
因为数据类型没有写出来,只是说明了有与引用的数据库表中的字段相同的数据类型,所以叫隐式定义。
既可以为每个变量用一个DEFINE保留字,也可以用一个DEFINE保留字定义多个变量,变量之间用逗号(,)分开。
若用LIKE保留字定义隐式变量,必须在DEFINE之前指明数据库名,以告诉DEFINE到哪儿找LIKE保留字中隐式说明的数据类型。
以隐式记录定义变量的方法是在DEFINE保留字后跟记录名,记录名后跟RECORDLIKEtable.*。
记录名用于调用包含在记录中的一组变量。
因为变量的数据类型没出现在定义语句中,所以是隐式定义。
用这种方法有两个好处:
● 不必查看表定义后才知道记录中有多少变量
● 若对表改变了,不必同时修改程序
若用LIKE保留字定义隐式记录,必须在DEFINE语句之前指明数据库名,以告诉DEFINE到哪儿找LIKE保留字中隐式说明的数据类型。
第五章函数间传值
参数可用于函数间传值。
在上图例子中,传了两个值。
在参数表中的值用逗号(,)分隔,作为参数的变量一般是局部变量,因为它不必传递全局范围的变量。
参数可以提高代码的可重用性。
就是说,同一函数可被整个应用多次调用。
在上例中,ck_state函数不用使用全局变量,就可用于检测输入到客户记录、雇员记录以及任何包括状态域记录的数据有效性。
带参调用函数时,一般要从调用的函数获得返回值。
在上图例子中,函数返回值说明输入的状态值是否有效。
若返回值是1,则状态有效;若值为零,则无效。
函数可以在表达式中隐式调用。
在上图例子中,简单的LET语句调用了ck_state函数,并把ck_state函数的返回值赋给变量cc。
在表达式中调用函数,被调用的函数必须返回一个简单值。
在条件表达式中可以隐式地调用函数。
在上图例子中,IF语句调用了ck_state函数,并以ck_state函数的返回值作判断条件。
当在条件表达式中调用函数时,调用函数必须返回TRUE或FALSE的布尔值以作判断。
在上图例子中,IF语句中用了NOT保留字。
若用户输入的状态不存在于state表中,ck_state函数返回FALSE。
“IFNOTFALSE”与“TRUE”相同。
因此,当ck_state返回FALSE时,调用帮助窗口,若为TRUE则跳过去。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- INFORMIX4GL 新手 进阶 整理