informix学习总结

合集下载

informix数据库SQL学习

informix数据库SQL学习

简单的SELECT语句SELECT语句是最重要也是最复杂的SQL语句,它和insert update和delete 语句一起用于数据操作,主要用于:●从数据库中检索数据●作为INSERT语句的一部分产生新的行●作为UPDATE语句的一部分更新信息1.S ELETE语句的简要介绍●构成:SELECT 子句指定要查询的表FROM 子句指定要查询的列WHERE子句选择特定的列或创建一个新的连接条件ORDER BY子句改变数据产生的次序INTO TEMP子句把结果以表的形式存放起来,供以后使用其中SELECT、FORM子句是必选的。

●权限查询数据库必须对该数据库具有connect权限以及对表具有SELECT权限,这些权限通常作为默认值赋给用户。

与数据库的操作权限有关的grant 和revoke语句将在后面讲到。

●关系操作选择:在表中满足特定条件的行的水平子集。

这一类型的SELECT 子句返回表中的一部分行的所有列。

选择是通过SELECT语句的WHERE子句来实现的。

例:SELECT *FROM customWHERE state=”NJ”显示结果如下:customer_num 107fname Charleslname Reamcompany Athletic Suppliesaddressl 41 Jordan Avenueaddress2city Palo Altostate CAzipcode 94304phone 415-356-9876投影:在表中一些列的垂直子集,子集包含了表中这些列的所有行。

这样的SELECT 语句返回表中所有行的一些列。

投影是通过在SELECT语句中的SELECT子句的选项来实现的。

例:SELECT UNIQUE city, state,zipcodeFROM customer查询结果包含了与customer 表中的相同数目的行,但仅投影了列的一个子集显示结果如下:city state zipcodeBartlesville OK 74006Blue Island NY 60406Brighton MA 02135Cheey Hill NJ 08002Denver CO 80219Jacksonville FL 32256Los Altos CA 94022Menlo Park CA 94025Moutain View CA 94040Moutain View CA 94063Oakland CA 94609Palo Alto CA 94303Palo Alto CA 94304Phoenix AZ 85008SELECT语句在大多数情况下同时使用选择和投影,查询返回表中的一些行和一些列。

INFORMIX -4GL新手进阶整理

INFORMIX -4GL新手进阶整理

Informix - 4GL 初级进阶Informix - 4GL 初级进阶 (1)第一章INFORMIX-4GL基本组成 (1)第二章INFORMIX-4GL的处理逻辑 (3)第三章INFORMIX-4GL中的数据类型 (6)第四章定义程序变量 (11)第五章函数间传值 (14)第一章INFORMIX-4GL基本组成程序INFORMIX-4GL中的程序可以处理大量的应用需求,可以管理小型商业或主要银行的资金。

INFORMIX-4GL程序包括执行特定函数所需的所有部分。

程序:为解决一个问题或处理数据由计算机执行的操作逻辑顺序。

模块文件INFORMIX-4GL的一个构件是模块(module),模块是INFORMIX-4GL指令的机器文件,是整个程序的一部分。

把一组模块组合在一起,就成为整个程序,上图中有三个模块,合在一起就组成了客户程序。

在上图,跟踪记录客户的程序分成了三个模块,每个模块有其特殊的作用,cust_main.4gl 模块用于驱动和控制程序,cust_add.4gl模块用于管理新增客户记录,cust_edit.4gl模块包括改变或删除客户记录的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不知从哪儿开始)执行。

Informix导数总结

Informix导数总结

Infoxmix命令语法总结:1)导出数据库中所有的表结构到文件db.sql$>dbschema -d your_database -t all db.sql2)导出数据库中所有的存储过程到文件db.sql$>dbschema -d your_database -f all db.sql3)导出数据库中的所有对象(包含表,存储过程,触发器。

)到文件db.sql $>dbschema -d your_database db.sql4)导出数据库中一个表的结构到文件db.sql$>dbschema -d your_database_name -t your_table_name db.sql5)导出一个存储过程定义到文件db.sql$>dbschema -d your_database_name -f your_procedure_name db.sql6)如果导出更多的表的信息(EXTENT...)$>dbschema -d your_database_name -ss db.sql7)导出数据库中对用户或角色的授权信息$>dbschema -d your_database_name -p all$>dbschema -d your_database_name -r all8)导出数据库中的同义词$>dbschema -d your_database_name -s all9)导出数据库中的Sequence。

$>dbschema -d payment -seq all cre_seq.sql10)导出表中所有数据$>unload to xxx.txt select * from tablename;11)导入数据到表中$>load from xxx.txt insert into tablename;。

最新informix笔记学习资料

最新informix笔记学习资料

第一章Informix介绍Informix提供了为开放系统开发和实现信息管理应用的先进产品。

核心产品包括应用开发和应用工具,数据库服务器以及中间件。

所有的产品都基于ANSI标准的SQL。

INFORMIX-OnLine:快速容错服务器,可以进行联机事务处理方面的应用; INFORMIX-OnLine是Informix的高性能、容错的、OLTP数据库服务器。

OnLine允许在数据库的字段中存放和使用二进制大对象(BLOBs),从而扩展了数据处理使之可以处理多媒体信息。

它还允许分布式数据库应用。

INFORMIX-SE:低维护服务器,适用于中、小规模的应用环境;INFORMIX-SE服务器适用于需要多用户的数据库服务器的环境,但是高的可用性(availability)和OLTP级别的性能不是关键。

它适用的环境是多用户共享数据库,运行中、小规模的应用。

INFORMIX-SE基于事实上的工业标准的UNIX的文件访问方法,即Informix C-ISAM。

Informix产品使用双进程体系结构,它把用户的前端应用代码和后端数据库服务器隔离。

应用开发工具或客户端,提供构建和运行应用程序的用户接口。

数据库服务器,进行所有的数据处理工作,包括数据的存储和检索。

工业标准SQL用于传送从客户端应用到Informix服务器的数据请求。

在双进程体系结构中,客户机和服务器可以位于同一台机器上或是通过网络相连接的不同的机器上。

当两个进程运行于不同的机器上时,称之为客户机/服务器体系结构。

上图表示Informix产品如何构成双进程体系结构。

客户机/服务器的体系结构有几个优点:●性能—隔离前端和后端进程,使得可以为特定的任务来优化软、硬件。

●灵活性—使用双进程体系结构,前端开发工具可以适用于不同的Informix服务器。

这样做,可以使用户选择最适合于自己的应用环境的服务器。

从长远的观点来看,开放式的体系结构使得来自于不同厂商的前端开发工具和服务器可以协同工作。

informix入门基础学习教程

informix入门基础学习教程

informix入门基础学习教程Informix是一个关系型数据库管理系统(RDBMS),是IBM公司开发的一种数据库管理系统。

它具有高效、可靠、安全的特点,被广泛应用于企业级应用程序中。

本文将介绍Informix的基础知识和学习教程。

一、Informix的概述Informix是一种面向企业级应用的数据库管理系统,它提供了高性能、可扩展、可靠的数据存储和处理能力。

Informix支持多种操作系统平台,包括Windows、Linux、Unix等。

它的特点包括事务处理、并发控制、数据安全等。

二、安装和配置Informix2. 配置Informix服务器,设置数据库存储路径、内存大小等参数。

3.创建数据库实例,设置数据库名称、用户名和密码等信息。

三、Informix的基本概念1. 数据库:Informix中的数据库是一组相关表的集合,用于存储和管理数据。

2.表:表是数据库中的基本组成单元,用于存储数据。

每个表包含多个列,每个列定义了一种数据类型。

3.列:列是表中的一个字段,用于存储特定类型的数据。

4.行:行是表中的一条记录,包含了一组相关的数据。

5.索引:索引是对表中一列或多列的值进行排序的数据结构,用于提高查询性能。

6.视图:视图是一个虚拟的表,它是基于一个或多个表的查询结果。

视图可以简化复杂的查询操作。

四、基本操作1.创建数据库:使用CREATEDATABASE语句创建一个新的数据库。

2.创建表:使用CREATETABLE语句创建一个新的表,并定义表中的列和其数据类型。

3.插入数据:使用INSERTINTO语句将数据插入到表中。

4.查询数据:使用SELECT语句从表中检索数据。

5.更新数据:使用UPDATE语句修改表中的数据。

6.删除数据:使用DELETEFROM语句从表中删除数据。

7.创建索引:使用CREATEINDEX语句在表上创建索引,以提高查询性能。

8.创建视图:使用CREATEVIEW语句创建一个新的视图。

(最新)informix SQL汇总(包括效率分析)(精品文档)

(最新)informix SQL汇总(包括效率分析)(精品文档)

informix SQL汇总每个数据库管理系统(DBMS)都有其自己的数据处理语言(DML),但所有DML都基于一种语言SQL语言——结构化查询语言(SQL),其发音为“sequel”或“S-Q-L”。

目前SQL的前身是E.F.Codd博士70年代发明的。

第一个实现是在76年,称为sequel。

而SQL首先被采用是在IBM的System R项目中。

86年10月由ANSI确定为正式的关系查询语言标准。

ISO在对其修改后在90年制定为国际工业标准。

无论进行何种数据库学习,SQL语言都是必学内容。

在我国数据库语言SQL标准(GB12991)中规定了两个数据库语言的语法与语义:模式定义语言(SQL-DDL),描述SQL数据库的结构与完整性的约束;数据操纵语言(SQL-DML),描述操作数据库的执行语句在本文章中涉及以上两个中的主要部分,(为叙述方便,以下对其统称为SQL),由于SQL 在嵌入C时表现略有不同,所以下面均以非嵌入时的SQL进行。

另外本文章也不是SQL的入门教材,阅读者应学习并实际用SQL操作过某种数据库。

如果你系统学习过数据库理论,又能熟练操作INFORMIX关系数据库,甚至从事过有关数据库程序的设计,还那么作者在此恭喜你了。

如果你尚未系统学习过数据库理论,并对INFORMIX数据库了解甚少,建议你先阅读有关的文档。

informix SQL汇总【主要SQL语句详解】CREATE DATABASE database_name [WITH LOG IN “pathname”]创建数据库。

database_name:数据库名称。

“pathname”:事务处理日志文件。

创建一database_name.dbs目录,存取权限由GRANT设定,无日志文件就不能使用BEGIN WORK等事务语句(可用START DATABASE语句来改变)。

可选定当前数据库的日志文件。

如:select dirpath form systables where tabtype = “L”;例:create databse customerdb with log in “/usr/john/log/customer.log”;DATABASE databse-name [EXCLUSIVE]选择数据库。

informix数据库的查询优化技术

informix数据库的查询优化技术

informix数据库的查询优化技术1.合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。

现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。

索引的使用要恰到好处,其使用原则如下:●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。

比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。

如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

●使用系统工具。

如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。

在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。

另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。

2.避免或简化排序应当简化或避免对大型表进行重复的排序。

当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。

以下是一些影响因素:●索引中不包括一个或几个待排序的列;●group by或order by子句中列的次序与索引的次序不一样;●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。

如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。

比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。

Informix数据库-长事务解析

Informix数据库-长事务解析

Informix数据库“长事务”分析解析要理解什么是“长事务”,还要从“事务”本身及数据库的逻辑日志工作原理谈起。

所谓“事务”(transaction),是一个完整的不可分割的数据处理单元。

该单元中所有的数据处理操作要么全部处理成功,要么因其中任意一个操作的失败而完全回滚至整个事务处理前状态。

为了保证事务的完整性,Informix 数据库通过逻辑日志(logical log) 来记录所有的事务操作及其处理的数据。

逻辑日志的作用之一在于对数据所发生的变化进行记录以满足可能的回滚需要。

Informix 数据库服务器把逻辑日志分成多个相互分离的磁盘空间,每个磁盘空间称为一个逻辑日志文件。

由于逻辑日志文件的大小和个数由参数指定,整个逻辑日志的空间是相对固定的,并不能无限制的增长。

所以对于逻辑日志文件的使用是循环进行的。

Informix 数据库服务器按数字顺序依次填充空闲的(即状态为free 或available)的逻辑日志文件。

当第一个逻辑日志文件变满时,接着开始填充下一个逻辑日志文件,直到填充完最后一个逻辑日志文件。

这时,数据库服务器回到第一个逻辑日志文件,试图将其内容释放,以循环使用( 如图1)。

图1. 循环使用的逻辑日志释放已经使用过的逻辑日志,需要具备很多条件。

其中之一就是该日志不能包含仍然活动的( 即还没有提交) 的事务。

因为活动的事务随时存在需要回滚的可能性,如果在事务还没有提交时,包含该事务记录的日志由于被释放重用,原来的事务操作记录被覆盖,当事务由于各种原因需要回滚时,回滚所需的记录就会缺失,从而导致无法保证事务的原子性和完整性。

那么,当数据库服务器需要循环使用某个逻辑日志文件,而该文件又包含有还没有提交的事务时,数据库系统就将被挂起(hang), 处于一种停滞状态,任何对数据库的更新操作都无法继续,从而影响系统的正常处理工作( 如图2)。

图 2. 长事务导致系统挂起为了防止这种现象的发生,我们把占用整个逻辑日志空间在一定比例以上的事务,就叫做“长事务”。

提高INFORMIX数据库运行效率的策略与措施

提高INFORMIX数据库运行效率的策略与措施
while (sqlca.sqlcode==0){
……
update satmxhz
set
sbrq=b.sbrq,
ye=b.ye,
lxjs=b.lxjs,
wdbs=wdbs+1,
dac=dac
where rowid=id;
……
如原为:
declare ps2 cursor for
select *,rowid
into b,id
from satmxhz
where zh[1,9]=vvjgbm
and bz=″0″
order by zh;
open ps2;
fetch ps2;
fetch cur_mxh;
}
close mx_cur;
close cur_mxh;
commit work;
以上一段程序是将satmxh表中记录转移到satmx表中,虽然可用
begin work;
insert into satmx select * from satmxh;
open ps2;
fetch ps2;
while (sqlca.sqlcode==0){
……
update satmxhz
set
sbrq=b.sbrq,
ye =b.ye,
lxjs=b.lxjs,
wdbs=b.wdbs,
dac=dac
4.建库的日志方式:
(1)No logging:不能进行事务处理。
(2)buffered log:共享缓存满即刷新写入磁盘。
(3)unbuffered log:当一个交易完成时即刷新写入磁盘。

Informix数据库性能常见问题典型情况浅析

Informix数据库性能常见问题典型情况浅析

Informix数据库性能常见问题典型情况浅析张生成(酒泉职业技术学院,甘肃酒泉735000)摘要:数据库配置安装完成投入运行后。

数据库运行的性能就成为数据库管理人员(DBA)的一个重要任务。

根据教学过程中对Informix数据库的使用,总结出了一些常见性问题的处理经验,希望能和大家共同交流。

关键词:日常信息;处理思路;代价信息TP311.13:A:1672-7800(2010)04-0169-021平时的信息收集和维护工作为了更好地处理可能出现的性能问题,需要在乎时就注意积累操作系统、数据库的日常运行信息,这样可以了解系统的运行特点和基本负荷变化情况,当数据库出现性能问题的时候,这些都是非常有用的信息。

收集Infonxix数据库的日常信息,最简单的可以仅观察onstat-p的输出结果,和数据库性能相关的主要是读缓存率(第一个%cached)、写缓存率(第二个%cached)、顺序扫描数(seqscans)。

读缓存率不应该低于90%,否则就应该关注顺序扫描数,找出经常被顺序扫描的大表,创建相应索引或修改应用SQL,必要时还需要增加数据库BUFFERS。

写缓存率通常不应该低于85%,不过由于受到应用写库的方式和LRU设置的影响,稍微低一些也可以接受。

数据库日志中记录的检查点持续时间(checkpoint durationtime)也需要关注,性能良好的实例中,该值不超过3秒。

在日常维护时,注意定期收集数据库的统计信息(update statistics),如果担心库太大,在业务空闲期间无法完成,至少应该对变化比较频繁的大表针对索引中的第一个字段收集统计信息,语法:update statistics for table mytab(coll);当性能问题出现后,可以按如下步骤来定位问题:首先应该利用操作系统命令查看一下当时操作系统状态:CPU/IO/SWAP,是否和平时差别很大;查看操作系统日志是否最近有异常报错;检查数据库日志,看看是否有断言错误(Assert Failed),是否有数据库内部错误发生,数据库的检查点持续时间相比平常是否有显著增加。

informix 聚合函数

informix 聚合函数

informix 聚合函数Informix聚合函数Informix是一种关系型数据库管理系统(RDBMS),它提供了丰富的聚合函数来处理数据库中的数据。

聚合函数用于计算或汇总一组值的结果。

在本文中,我们将详细介绍Informix中的聚合函数及其用法。

聚合函数用于合并和分析数据,以便生成单个结果。

这些函数可以用于从数据库中检索出特定数据或计算数据的总和、平均值、最大值、最小值等。

Informix提供了多种聚合函数,包括SUM、AVG、COUNT、MIN和MAX等。

1. SUM函数SUM函数用于计算一组数值的总和。

它可以应用于整数、浮点数和数值列。

以下是SUM函数的基本语法:sqlSELECT SUM(column_name)FROM table_name;例如,我们有一张名为"orders"的订单表,其中有一个"amount"列,我们想要计算所有订单金额的总和:sqlSELECT SUM(amount)FROM orders;2. AVG函数AVG函数用于计算一组数值的平均值。

它可以应用于整数、浮点数和数值列。

以下是AVG函数的基本语法:sqlSELECT AVG(column_name)FROM table_name;例如,我们有一个名为"products"的产品表,其中有一个"price"列,我们想要计算所有产品价格的平均值:sqlSELECT AVG(price)FROM products;3. COUNT函数COUNT函数用于计算一组值的数量。

它可以应用于任何数据类型。

以下是COUNT函数的基本语法:sqlSELECT COUNT(column_name)FROM table_name;例如,我们有一张名为"customers"的客户表,我们想要计算总共有多少个客户:sqlSELECT COUNT(*)FROM customers;4. MIN函数MIN函数用于查找一组值中的最小值。

Informix-4gl学习资料 informix-4gl

Informix-4gl学习资料 informix-4gl

第一章 Informix环境变量的设定一.环境范例:二.环境范例:.profile (环境变量的等号前后不得为空格)stty -istrip -isig (防止用户非法中断)INFORMIXDIR=/usr/informixINFORMIXSERVER=ld420501_tcpONCONFIG=onconfig.lifePATH=$PATH:$INFORMIXDIR/bin:$HOME/bin:$HOME/form:$HOME/prg DBPATH=/u/cbps/form:/u/cbps/binFORMDIR=/u/cbps/formDBDATE=Y4MD/LANG=english_us.8859DBLANG=english_us.8859DBNLS=2TERMCAP=/usr/informix/etc/termcapTERM=vt100export INFORMIXDIR INFORMIXSERVER ONCONFIG PATH DBPATH FORMDIR DBDATE LANGexport DBLANG DBNLS TERMCAP TERM环境变量的设置文件中还可加入其它Shell语句第二章 Informix产品线及DB应用开发工具简介一.Informix(英孚美)产品线简介(三大类):1.数据库服务器(Database Server):①.ODS (Informix-Online Dynemic Server)联机动态服务器,多线索,多性能的DB server(数据库服务器)②.XPS (Informix-Online Extended Parallel Server)将DSA扩展至松耦合或非共享的计算体系结构,动态可申缩性体系结构(Dynemic Scerable Architerta),适用于大型数据库的应用,并行SQL操作。

③.IUS (Informix-Universbl Server)处理丰富而复杂的数据而设计,并用Datablade模块技术,用来存储和检索丰富的多媒体Data及其他复杂的插入或对象扩展模块。

学习笔记-informix-onstat

学习笔记-informix-onstat

学习笔记-informix-onstat -d命令onstat -d 命令的理解:onstat -d命令可以查看各分⽚对应dbs的空间情况,其输出结果分为两部分,Dbspace部分和Chunks部分部分:例Dbspace部分ZB0000XZB2[/home/informix]$onstat -dIBM Informix Dynamic Server Version 11.50.FC8W4 -- On-Line -- Up 76 days 21:14:36 -- 170885936 KbytesDbspacesaddress number flags fchunk nchunks pgsize flags owner name700000c87729028 1 0x60001 1 1 4096 N B informix rootdbs700000c8add04f0 16 0x60001 27 2 16384 N B informix newreinssfdbs01700000c8add0688 17 0x60001 28 2 16384 N B informix newreinssfdbs02700000c8add0820 18 0x60001 29 2 16384 N B informix newreinssfdbs03700000c8add09b8 19 0x60001 30 2 16384 N B informix newreinssfdbs04各个字段的意义为:Address共享内存中数据空间表的地址Number Dbspace 的唯⼀idFlags0x0001No Mirror0x0002Mirror0x0004Down0x0008Newly Mirrored0x0010Blobspace.fchunk.id number of first chunk (第⼀chunk id).nchunk Number of chunks in the dbspaceFlags第⼀位置M MirroredN Not Mirrored第⼆位置X Newly MirredP已物理恢复,等待逻辑恢复L已经逻辑恢复R已经恢复第三位置B BlobspaceOwner建⽴者Name.dbspace 名称例chunks部分:Chunksaddress chunk/dbs offset size free bpages flags pathname700000c877291c0 1 1 0 5242880 5213697 PO-B- /home/informix/newreinsdbs/nreinsrootlv01 700000c8ade69b8 2 2 0 20971520 491467 PO-B- /home/informix/newreinsdbs/nreinsploglv01 700000c8ade6ba8 3 3 0 52428800 204747 PO-B- /home/informix/newreinsdbs/nreinslloglv01各个字段的含义:.address Chunk 的地址.chk/dbs.chunk编号和与之对应的dbspace编号.offset设备中的偏移.size.chunk的⼤⼩(以pages为单位,即2k为单位).free在chunk中剩余的blobpage数.bpages在blobpages中chunk 的⼤⼩..flags第⼀位置P主数据空间(Primary)M镜相数据空间(Mirror)第⼆位置O OnlineD DownX Newly MirroredI不⼀致(Inconsistent)第三位置B Blobspace-DbspaceT临时数据空间Temporary dbspace.pathnames物理设备路径总结:⼀个dbspace对应多个chunk,dbspace部分的信息中包含⾃⼰的id,对应的第⼀个chunk的chunkid,chunk的数量,通过chunk中的“chk/dbs”字段可以相互对应起来。

INFORMIX--4GL新手进阶整理

INFORMIX--4GL新手进阶整理

Informix - 4GL 初级进阶Informix - 4GL 初级进阶1第一章INFORMIX-4GL基本组成1第二章INFORMIX-4GL的处理逻辑2第三章INFORMIX-4GL中的数据类型3第四章定义程序变量4第五章函数间传值5第一章INFORMIX-4GL基本组成程序INFORMIX-4GL中的程序可以处理大量的应用需求,可以管理小型商业或主要银行的资金.INFORMIX-4GL程序包括执行特定函数所需的所有部分.程序:为解决一个问题或处理数据由计算机执行的操作逻辑顺序.模块文件INFORMIX-4GL的一个构件是模块<module>,模块是INFORMIX-4GL指令的机器文件,是整个程序的一部分.把一组模块组合在一起,就成为整个程序,上图中有三个模块,合在一起就组成了客户程序.在上图,跟踪记录客户的程序分成了三个模块,每个模块有其特殊的作用,cust_main.4gl模块用于驱动和控制程序,cust_add.4gl模块用于管理新增客户记录,cust_edit.4gl模块包括改变或删除客户记录的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后面的语句,并以END IF或ELSE保留字为结尾. 若有ELSE子句,在测试条件为FALSE<或NULL>时,INFORMIX-4GL才执行ELSE子句.嵌套IF语句IF语句可以嵌套在IF语句中,常见的错误是忘了写END IF保留字或在嵌套IF语句中,IF和END IF不匹配.这种情况下编译时会出现错误信息,提示一般语法错误.CASE语句:CASE语句可以减少多重IF语句.它常用于在一个语句中表示连贯相关的选择判断.判断:WHENEVERWHENEVER语句在INFORMIX-4GL语句执行过程中用于捕获错误和例外情况. WHENEVER是个编译开关<Compiler Swith>,编译开关或编译指令并不在程序运行过程中执行,是在处理代码时改变编译模式.WHILE循环用WHILE循环在状态布尔表达式值为TRUE时一直执行循环体语句或语句组.EXIT WHILE语句把程序控制权转到END WHILE后的第一个语句处执行.CONTINUE WHILE语句中断循环体语句序列,并把程序控制权返回给循环体头部,并测试布尔表达式值.若布尔表达式值为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-24 12:00> YEAR TO MINUTEDATETIME<16 12:23> DAY TO MINUTEDATETIME<31.234> SECOND TO FRACTIONDATETIME数据项可以是公元1年到公元9999年之间的任一时间点.INTERVAL数据类型用于存储一个时间段.如上图,第一个INTERVAL表示89年零8个月,第二个INTERVER表示560天零2小时25秒. 例如:INTERVAL<5-3> YEAR TO MONTHINTERVAL<11:15> HOUR TO MINUTEINTERVAL数据项可以表示大到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保留字后跟变量列表,在最后放END RECORD保留字.因为变量的名字和数据类型都出现在声明中,所以是显式定义.它的命名规则同变量命名规则.要调用记录成员,必须在变量前加记录名,如:c_name.fname下面是调用记录所有变量的简写方式:c_name.* 其中*表示记录c_name中的所有变量.在DEFINE后跟变量名,数据类型通过保留字LIKE后跟table.columnname<表.字段名>分配.因为数据类型没有写出来,只是说明了有与引用的数据库表中的字段相同的数据类型,所以叫隐式定义.既可以为每个变量用一个DEFINE保留字,也可以用一个DEFINE保留字定义多个变量,变量之间用逗号<,>分开.若用LIKE保留字定义隐式变量,必须在DEFINE之前指明数据库名,以告诉DEFINE到哪儿找LIKE保留字中隐式说明的数据类型.以隐式记录定义变量的方法是在DEFINE保留字后跟记录名,记录名后跟RECORD LIKE table.*.记录名用于调用包含在记录中的一组变量.因为变量的数据类型没出现在定义语句中,所以是隐式定义.用这种方法有两个好处:●不必查看表定义后才知道记录中有多少变量● 若对表改变了,不必同时修改程序若用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."IF NOT FALSE"与"TRUE"相同.因此,当ck_state返回FALSE时,调用帮助窗口,若为TRUE则跳过去.。

informix逻辑日志监控与分析

informix逻辑日志监控与分析

informix逻辑日志监控与分析逻辑日志实际上是一组文件,这些文件保存了自上次 0 级备份以来数据库事务和数据库服务器变更的历史记录。

逻辑日志文件不是普通的操作系统文件。

它们是由 Informix Dynamic Server 在第一次初始化期间自动创建的,由 Informix Dynamic Server onparams实用程序管理。

逻辑日志文件是循环的。

换句话说,在它们被填满之后,又可以一次接一次地重复使用。

但是,对于重用有一定的条件:必须备份逻辑日志文件。

默认情况下,当日志文件被填满时,Informix Dynamic Server 服务器将自动备份逻辑日志文件。

这是由配置文件中的 ALARMPROGRAM 参数规定的。

应该总是将该参数设置为一个名为 log_full.sh 的脚本,该脚本会进行逻辑日志文件的备份。

Log_full.sh 是随 Informix Dynamic Server 软件包一起提供的一个服务器系统脚本。

逻辑日志中的所有记录都必须与关闭的事务相关联。

这里提到的关闭的事务,是指要么提交要么回滚了的事务。

如果一个事务悬而未决,而在逻辑日志中又有与之关联的一条记录,那么该逻辑日志就不能重用。

逻辑日志决不能包含最后检查点记录。

Onstat -l输出可以告诉我们那个逻辑日志包含了最后检查点记录:如果在输出中标志字段的最后一位是“L”,那么表明逻辑日志包含了最后检查点记录,因而不能重用。

逻辑日志决不能包含任何没有刷新到磁盘的事务。

这是为了确保所有事务不会丢失。

当一个事务完成时,它呆在逻辑日志中,等待检查点的到来,以便刷新到磁盘。

如果我们在检查点之前重用逻辑日志,那么将丢失所有那些事务。

在配置逻辑日志时,我们需要注意以下问题:大小。

逻辑日志文件的适当大小介于 200 KB(最小)和 2,097,152 KB(最大)之间。

这是一个很宽的范围,也没有什么难于遵循的规则。

基本上,更小的逻辑日志文件有更小的恢复粒度。

Informix培训教材整理之系统维护技巧谈

Informix培训教材整理之系统维护技巧谈

Informix培训教材整理之系统维护技巧谈Informix是一种大型的数据库管理系统,具有先进的技术、性能与可靠性,在全球范围的各种应用中使用十分广泛,包括政府、金融保险、邮政电信、制造及零售等重要行业或领域。

本文根据笔者在SCOUnix/Xenix上使用Informix-4GL与Informix-SQL的经验,简要介绍Informix系统维护中的几个较为特殊的问题及其处理方法。

表文件的修复:Informix的数据库是指由若干张表所构成的集合,其中每一张表对应着两个文件,即数据文件(后缀为.dat)与索引文件(后缀为.idx)。

当系统出现异常、死机、掉电或非正常关闭时,有时会使一些使用中的表文件未能正常关闭而出现毁损,当系统再次对这些表进行相关操作时,就会报告“不能检索下一条记录”、“不能删除记录”等错误信息。

通常,数据文件是很少发生问题的。

要判别数据文件是否正常,只需执行select * from 〈table—name〉语句或类似的语句即可,但不能使用where、order by等子句,以免利用到索引文件,目的就是纯粹从数据文件中依次读取数据。

如果数据读取顺利且记录个数正确,表明该文件完好无损;反之,则有问题,通常只能用其数据备份来恢复。

如果数据文件正确无误,那么就该检查相应的索引文件。

Informix提供有一个实用程序bcheck,专门用来检查与修复索引文件,即依次比较数据文件与索引文件,倘若不一致,就询问是否删除和重建有问题的索引。

bcheck有许多选项可供选用,其中-n和-y用于对所有的提问都回答“no”或“yes”,让系统自动进行一系列的操作。

其语法如下:bcheck[选项] 〈表文件名〉要检查表的索引文件,应先运行bcheck-n命令。

如果一切正常,说明索引没有问题。

一旦发现有错误报告(如有多少个错误数据记录指针、丢失了多少个数据记录指针或索引结点指针等),则再执行bcheck-y 命令即可将其修复。

informix过程笔记

informix过程笔记

ac_rev_amnt=rev_o_rev_amt;
select date(rec_prem_date) into acc_rec_prem_date
from rec_prem_acc where I_info_appl_branch=rev_I_info_branch
and I_info_appl_no=rev_I_info_appl_no
o_rev_date,o_rev_amt into rev_I_info_branch,
rev_I_info_appl_no,rev_I_info_date,rev_o_rev_date,
rev_o_rev_amt from rev_rec_tbl where
ELSE
LET REL=0; --当STR1=STR2 REL=0
END IF
RETUEN REL;
END PROCEDURE
当IF的条件为一个SQL语句如SELECT时需用扩号,并且返回值为单值。
②.FOR .....END FOR
例:FOR INDEX IN (20 TO 30 STEP 2,100 TO 200 STEP 10)
p_rev_amt =acc_ac_rev_amnt
where I_info_appl_branch=rev_I_info_branch
and I_info_date=rev_I_info_date
and I_info_appl_no=rev_I_info_appl_no
and o_rev_date=rev_o_rev_date;
end foreach;
commit work;
end procedure;

informix学习总结

informix学习总结

INFORMIX的学习第一章ESQL/C的数据类型数据类型SQL与C数据类型的对应简单类型SQL ? ? ? ? CCHAR(n)? ? ? ? ? char(n+1)CHARCTER(n)? ? ? char *SMALLINT ? ? ? ? ?short intINTERGERINT ? ? ? ? ?long intSMALLFLOATREAL ? ? ? ? ?floatFLOATDOUBLE PRECISIONdoubleSERIAL ? ? ? ? ? long intDATE ? ? ? ? ? long int复杂类型SQL ? ? ? ? ? CDECIMALDEC NUMERIC ? ? ? ? ?dec_t or struct decimalMONEY ? ? ? ? ?dec_t or struct decimalDATETIME ? ? ? ? ?dtime_t or struct dtimeINREVER ? ? ? ? ? ? ?intrvl_t or struct intrvlVARCHAR ? ? ? ? ? ? ?varchar or string数据类型转换转换类型?转换后FLOAT ?DECIMAL(16)SMALLFLOAT ?DECIMAL(8)INTERGER ?DECIMAL(10,0)SAMLLINT ?DECIMAL(5,0)?数据类型的转换函数有关CHAR类型的函数1、以空值结尾的串的操作函数rdownshift(char *s) ? ? ? ? ?把一个字符串中的所有字母转换成小写形式。

rupshift(char *s) ? ? ? ? ? ? 把一个字符串中的所有字母转换成大写形式。

stcat(char *s, char *dest) ? ? ?把一个字符串同另一个字符串相连接。

stcmpr(char *s1, char *s2) ? ? 比较两个字符串。

Informix_SQL使用汇总

Informix_SQL使用汇总

informix SQL汇总每个数据库管理系统(DBMS)都有其自己的数据处理语言(DML),但所有DML都基于一种语言SQL语言——结构化查询语言(SQL),其发音为―sequel‖或―S-Q-L‖。

目前SQL的前身是E.F.Codd博士70年代发明的。

第一个实现是在76年,称为sequel。

而SQL首先被采用是在IBM的System R项目中。

86年10月由ANSI确定为正式的关系查询语言标准。

ISO在对其修改后在90年制定为国际工业标准。

无论进行何种数据库学习,SQL语言都是必学内容。

在我国数据库语言SQL标准(GB12991)中规定了两个数据库语言的语法与语义:模式定义语言(SQL-DDL),描述SQL数据库的结构与完整性的约束;数据操纵语言(SQL-DML),描述操作数据库的执行语句在本文章中涉及以上两个中的主要部分,(为叙述方便,以下对其统称为SQL),由于SQL 在嵌入C时表现略有不同,所以下面均以非嵌入时的SQL进行。

另外本文章也不是SQL的入门教材,阅读者应学习并实际用SQL操作过某种数据库。

如果你系统学习过数据库理论,又能熟练操作INFORMIX关系数据库,甚至从事过有关数据库程序的设计,还那么作者在此恭喜你了。

如果你尚未系统学习过数据库理论,并对INFORMIX数据库了解甚少,建议你先阅读有关的文档。

informix SQL汇总【主要SQL语句详解】CREATE DATABASE database_name [WITH LOG IN ―pathname‖]创建数据库。

database_name:数据库名称。

―pathname‖:事务处理日志文件。

创建一database_name.dbs目录,存取权限由GRANT设定,无日志文件就不能使用BEGIN WORK等事务语句(可用START DATABASE语句来改变)。

可选定当前数据库的日志文件。

如:select dirpath form systables where tabtype = ―L‖;例:create databse customerdb with log in ―/usr/john/log/customer.log‖;DATABASE databse-name [EXCLUSIVE]选择数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

i n f o r m i x学习总结-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KIIINFORMIX的学习第一章 ESQL/C的数据类型数据类型SQL与C数据类型的对应简单类型SQL CCHAR(n) char(n+1)CHARCTER(n) char *SMALLINT short intINTERGERINT long intSMALLFLOATREAL floatFLOATDOUBLE PRECISIONdoubleSERIAL long intDATE long int复杂类型SQL CDECIMALDEC NUMERIC dec_t or struct decimalMONEY dec_t or struct decimalDATETIME dtime_t or struct dtimeINREVER intrvl_t or struct intrvlVARCHAR varchar or string数据类型转换转换类型转换后FLOAT DECIMAL(16)SMALLFLOAT DECIMAL(8)INTERGER DECIMAL(10,0)SAMLLINT DECIMAL(5,0)数据类型的转换函数有关CHAR类型的函数1、以空值结尾的串的操作函数rdownshift(char *s) 把一个字符串中的所有字母转换成小写形式。

rupshift(char *s) 把一个字符串中的所有字母转换成大写形式。

stcat(char *s, char *dest) 把一个字符串同另一个字符串相连接。

stcmpr(char *s1, char *s2) 比较两个字符串。

stcopy(char *from, char *to) 把一个字符串拷贝到另一个字符串。

stleng(char *string) 统计字符串的长度。

2、定长串的操作函数bycmpr(char byte1, byte2, rpt len) 比较两组连续的字节内存块。

bycopy(char *from, char *to, int len) 把一块内存的内容拷贝到另一块内存。

byfill(char *to, int len, char ch) 用字符填充指定的内存块。

byleng(char from, int count) 统计有效字符的数目。

有效字符是指字符串去除了末尾空格所剩的字符。

3、字符串操作函数ldchar(char *from, int num, char *to) 拷贝定长串到空值结尾的串。

stchar(char *from, char *to, int num) 拷贝空值结尾的串到定长串。

4、字符串函数简单数值转换rstod(char *str, double *dblval) 把以空值结束的字符串转换成C的double型rstoi(char *str, int *intval) 把以空值结束的字符串转换成C的int类型。

rstol(char *str, long *lngval) 把以空值结束的字符串转换成C的long类型。

DATE类型的函数1、创建内部日期rdefmtdate(long *jdate, char *frmt char *str) 生成具有确定格式的日期字符串。

(str 字符串和fmt必须按月、日、年的同一顺序)返回代码:0操作成功。

-1204在str参数中有非法的月份。

-1206在str参数中有非法的日期。

-1209由于str中没有包含年、月、日各部分间的定界符,str的长度必须准确定义为6或8个字节长。

-1212fmt中没有包含年、月、日部分。

fmt和str的有效组合fmt str“mmddyy”“DEC 25th 1997”“mmm.dd.yyyy”“dec 25 1997”“mmm.dd.yyyy”“DEC-25-1997”“mmm.dd.yyyy”“12251997”“mmm.dd.yyyy”“12/25/1997”“yy/mm/dd”“97/12/25”“yy/mm/dd”“1997,December, 25th"“yy/mm/dd”“In the year 1997, the month of December, its 25th day”“dd-mm-yy”“This 25th day of December, 1997”rmdyjul(short mdy[3], long *jdate) 用三个短整数生成一个内部日期这三个整数是有关年、月、日的数字值。

(年必须以完整的形式表达)返回代码:0操作成功。

-1204在mdy[2]中有非法年份。

-1205在mdy[1]中有非法月份。

-1206在mdy[0]中有非法日期。

rstrdate(char *str, long *jdate) 将一个字符串日期转换成一内部格式的日期。

rtoday(long *jdate) 从系统日期创建一个内部日期值。

2、从内部日期转换成其他类型rfmtdate(ling jdate, char *fmt, char *str) 从内部格式的日期类型值创建格式化的字符串。

返回代码:0操作成功。

-1210内部日期不能被转换成月-日-年格式。

-1211程序存储溢出,即存储分配错误。

rjulmdy(long jdate, short mdy[3]) 从一个内部日期生成一个含有3个短整数的数组对应内部日期的月、日、年。

rdatestr(long jdate, char *str) 从一个内部日期值创建缺省的日期字符串。

rdayofweek(long jdate) 给定一内部格式表示的日期,此函数返回所对应的星期中的某一天。

rleapyear(int year) 用来判断给定的年份是否为闰年。

返回值:TRUE(1)是闰年FALSE(0)不是闰年简单数值类型的格式化函数rfmtdouble(double dbval, char *fmt, char *str) 将双精度格式化为指定的模板格式。

rfmtlong(double longval, char *fmt, char *str) 将长整型值格式化为指定的模板格式。

可以构成格式模板串的字符:*以星号代替空格。

&以0代替空格。

#代表一个数字或空格的位置。

<左调整,显示一个逗号,仅当左边有数字时才显示。

.显示一个小数点,一个格式模板串只能有一个小数点。

-显示负号,当数字为负的时候显示。

+显示正号,当数字为正的时候显示。

(显示一个负号,同(一起显示负值。

)显示一个负号,同)一起显示负值。

$显示美元符号。

处理空值的数值类型函数risnull(int type, char *cvar) 检查C变量是否为空值。

rsetnull(int type, char *cvar) 给C变量置空值。

(五)其他函数typalign(int pos, int type) 返回一具有指定数据类型变量的下一个位置。

rtypmsize(int sqltype, int sqllen) 返回你必须分配在存储单元中的指定的C或RDSQLD的字节数。

rtyname(int sqltype) 返回一包含指定RDSQL类型名的以空结尾的串。

rtypwidth(int sqltype, intsqllen) 返回一具有RDSQL类型的值转换为一字符类型时避免截取所需的最小字符数。

ESQL/C数据类型的进一步说明DECIMAL数据类型的使用1、DECIMAL函数——把C的数据类型转换为DECIMAL值deccvasc(char *from, int len, dec_t *to) 把ASCII字符串转换成DECIMAL值。

返回值:0转换成功-1200数字太大,上溢。

-1201数字太小,下溢。

-1213存在非数值字符。

-1216存在错误指数。

注意事项:(1)字符串的前导空格被忽略。

(2)字符串可以有前导符号“+”或“-”。

(3)字符串可以包含e或E的指数形式,指数前可带符号“+”或“-”。

deccvint(int from, dec_t *to) 把C的整数转化成DECIMAL值。

deccvlong(long from, dec_t *to) 把C的长整数转化成DECIMAL值。

deccvdbl(double from, dec_t *to) 把C的双精度值转化成DECIMAL值。

2、DECIMAL函数——把DECIMAL值转换成字符型dectoasc(dec_t *from, char *to, int len, int rt) 把DECIMAL值转换成ASCII字符串。

说明:len串缓冲区字节的最大长度。

rt表示十进制小数右边十进制的位数。

(1)rt=-1,则十进制位的个数有*from的十进制值决定。

(2)如果此数不适合长度len的字符串,则该函数将这个数转换为指数表示的形式。

如果仍不适合,则串用“*”号填满。

如果数的长度短于串长,则右对齐且左部用空格填充。

dececvt(dec_t *from, int ndgt, int *decpt, int *sign) 将一十进制数转换成以空格结束的具有指定个数的字符串,且返回此字符串的指针。

decfcvt(dec_t *from, int ndgt, int *decpt, int *sign) 将一十进制数转换成以空格结束、小数点右边具有指定位数的字符串,且返回此字符串的指针。

rfmtdec(dec_t *from, char *format, char *to) 将DECIMAL值转换成格式化的字符串。

1、DECIMAL函数——把DECIMAL值转换成数值型dectoint(dec_t *from, int *to);dectolong(dec_t *from, long *to);dectodbl(dec_t *from, double *to)2、DECIMAL函数——算术运算decadd(dec_t *op1, dec_t *op2, dec_t *result);decsub(dec_t *op1, dec_t *op2, dec_t *result);decmul(dec_t *op1, dec_t *op2, dec_t *result);decdiv(dec_t *op1, dec_t *op2, dec_t *result);返回代码:0操作成功-1200操作产生上溢-1201操作产生下溢-1202试图用零作除数3、DECIMAL函数——DECIMAL操作deccmp(dec_t *dec1, dec_t *dec2);-1dec1<dec20dec1=dec21dec1>dec2DECUNKNOW有一个是空值deccopy(dec_t *dec1, dec_t *dec2);decround(dec_t *dec1, int scale);dectrunc(dec_t *dec1, int scale);DATETIME和INTERVAL使用方式及实例1、概述DATETIME数据类型存放时间,时间由以下部分组成:YEAR,MONTH,DAY,HOUR,MINUTE,SECOND和秒的FRACTION(n)。

相关文档
最新文档