第一章 INFORMIX ESQL

发布时间:2010-12-10 10:48:46

第一章 INFORMIX ESQL/C概述

INFORMIX ESQL/C是数据库应用程序开发工具之一,它以它独有的灵活性、易学易用性,在众多数据库应用程序开发产品中占有一席之地。

INFORMIX ESQL/C就是在C语言程序中直接嵌入SQL语句,这样做的目的是使得使用C语言开发应用程序的开发者能方便的访问数据库,开发出满足各种要求的数据库应用程序。那么,它与其它INFORMIX开发工具比较有什么特点呢?

首先,INFORMIX ESQL/C程序的开发没有一个菜单式的开发界面。如INFORMIX-4GL程序的开发有一个包含屏幕格式、模块、程序各部分编辑、编译及运行的菜单界面。而INFORMIX ESQL/C是通过编辑工具如vi等来进行编辑的。

其次,INFORMIX ESQL/C开发需要一个预处理器来进行程序的预编译。INFORMIX ESQL/C的编译命令是esq1,它完成预编译、编译、链接、生成可执行文件等工作。预处理器所做的工作是将ESQL/C的代码转换成C的代码,再调用C的编译器来处理C程序代码。

INFORMIX公司对ESQL/C程序的开发有强劲的支持。在ESQL/C中不仅可以使用INFORMIX提供的预编译命令,还可调用INFORMIX提供的库函数和头文件。

1.1 ESQL/CANSI标准的扩充

ESQL/C V4.0中的SQL语言与ANSI Level Ⅰ的SQL标准完全兼容,与ANSI LEVELⅡ的SQL标准大部分兼容。

INFORMIX-ESQL/C除完全包括标准的SQL语言的语句外,还对其进行了扩充,增加了一些没有的语句,增强了一些已有语句的功能。

下表列出了所有不符合ANSI语法的ESQL/C的语句。

表中所列的语句有:建立和修改数据库模式的语句、与INSERT游标有关的语句、与事务及跟踪有关的语句等等。为了完成特定的功能,ESQL/C在一些语句中增加了关键字,一一列举如下:

1.SELECT语句

增加了关键字UNIQUE,其语义同标准SQL中的DISTINCT,将查询出的结果去掉重复的数据行。关键字OUTER用来形成外连接;关键字MATCHES用于查询条件的表达式中,进行字符串匹配;用数字来指示查找项的位置也是Select语句的一种扩充,如Group by子句和Order by子句中都可以用数字来指代查找项,数字就是该查找项在查询字段中的位置;INTO TEMP子句也是一种扩充功能,它将查出的数据放在一临时表中;另外,一些函数可以出现在Select语句任何接收常量的地方,它们是Length()Date()Day()MDY()MONTH()WEEKDAY()YEAR()CURRENTEXTEND()TODAY

2.DECLARE语句

在游标说明语句DECLARE中,增加了关键字WITH HOLD,表明对一个具有事务的数据库进行操作时,提交事务并不关闭该游标;关键字SCORLL说明一滚动的游标;关键字INSERT用于说明插入游标;关键字FOR UPDATE,使得利用游标查出的数据行被加上排它锁,可以用CURENT OF指示当前行进行修改或删除。

3.UPDATE语句

在用UPDATE语句修改数据库中的数据时,可以说明多个列,这在ANSI标准中是不允许的。

4.GRANT语句

GRANT语句中有关键字CONNECTRESOURCEDBAAS,该语句是不符合ANSI标准的。在ANSI标准中,GRANT语句要地CREATE SCHEMA AUTHORIZATION中说明。

5.CREATE TABLE语句

在该语句中增加了关键字TEMP用于创建一个临时表,该表只在程序运行时存在;关键字UNIQUE CONSTRAINT用于指明表中的一个列或一组列只接收唯一的值;关键字IN可以将创建的表放在某个目录下,而不必放在为数据库创建的目录下,这样可以将一个数据库的文件分散在不同的磁盘上或放在不同的网络节点上;还增加了下面的数据类型,SERIALDATAMONEYSMALLFLOATDATETIMEINTERVAL。在ANSI标准中,该语句也要出现在CREATE SCHEMA AUTHORIZATION中。

6.CREATE VIEW语句

ANSI标准中,该语句也要在CREATE SCHEMA AUTHORIZATION中说明。

1.2 ESQL/C程序与ANSI数据库

MODE ANSI数据库是符合ANSI标准的数据库,在使用ESQL/C时,同样可以做到只使用符合ANSI标准的语句来创建和访问MODE ANSI的数据库。INFORMIX提供了检查所用语句是否符合ANSI标准的手段。

当你在创建或初启数据库时,可以将其说明成MODE ANSI数据库。在标准模式的数据库中,事务是隐式说明的,也就是说你是处于事务中。对MODE ANSI数据库进行操作时,语句中最明显的差异是所有对象的引用都要在前面加上所有者的名字。这里所说的对象包括表名、视图名、索引名、同义词等。在所有者和对象名之间用点“·”分开。例如,用户john创建了表customer,那么查询语句应写成:

Select * from john.customet

其中,所有者都是指创建该对象时的用户登录名。

INFORMIX提供两种方式来检查ESQL/C程序与ANSI标准的相容性:

1.通过设置环境变量DBANSIWARN

在编译或运行ESQL/C程序时,检查所用到的SQL语句,若遇到INFORMIX-ESQL/C

ANSI标准语法的扩充,就会发出警告信息。

2.在编译的命令行上加上选项-ansi也能对不符合ANSI标准的语句发出警告。

1.3 设置开发的环境变量

要利用INFORMIX ESQL/C提供以上所述的支持,必须在.profile.login文件中设置有关环境变量:

INFORMIXDIR = INFORMIX ESQL/C的安装目录

PATH = $INFORMIXDIR/bin:$PATH

SQLEXEC = $INFORMIX/lib/sqlrm/*ESQL/C版本与SERVER版本不同时*/

设置好环境变量后,便可以开始INFORMIX ESQL/C编程了。

1.4 ESQL/C程序的编译及运行

vi或其它编辑器编辑ESQL/C程序,ESQL/C的源程序文件名必须以.ec为后缀。接下来要做的是编译ESQL/C程序。

esql是用于编译INFORMIX ESQL/C程序的命令,它将嵌入的SQL语句转换成C的代码,再调用C的编译器CC,将C代码文件转换成目标代码文件,最后链接上标准函数库和INFORMIX ESQL/C的函数库,生成可执行的文件。嵌入式的SQL语句往往被翻译成DBMS专有程序设计接口的运行时库的函数调用。

esql命令有许多的选项,详细内容请参考INFORMIX ESQL Training book。这里,举一个例子说明esql的流程,如图1.1

esq1 demo1.ec file.c -l lib.a -0 demo1.ece

preprocesson

demo1.ec

CC compiler ESQL/C函数库

demo1.c file.0 标准函数库

1.1

1.1esql命令将文件demol.ecfile.c编译成可执行的文件demol.ecefile.c文件不用经过预编译,由CC直接编译成目标文件。各文件的编译过程选择是根据文件名的后缀来确定的,所以在存储编辑好的文件时要使用恰当的文件后缀。-1选项后的文件名是用户定义的函数库名。这里,链接的函数库有三个:lib.aESQL/C函数库和标准函数库。

编译ESQL/C程序后,在操作系统提示符下键入文件名来执行。如: $demol.ece

第一章 INFORMIX ESQL

相关推荐