![informix笔记_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-2/19/7663ea0c-706e-4862-9fa8-aea5e7f2b469/7663ea0c-706e-4862-9fa8-aea5e7f2b4691.gif)
![informix笔记_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-2/19/7663ea0c-706e-4862-9fa8-aea5e7f2b469/7663ea0c-706e-4862-9fa8-aea5e7f2b4692.gif)
![informix笔记_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-2/19/7663ea0c-706e-4862-9fa8-aea5e7f2b469/7663ea0c-706e-4862-9fa8-aea5e7f2b4693.gif)
![informix笔记_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-2/19/7663ea0c-706e-4862-9fa8-aea5e7f2b469/7663ea0c-706e-4862-9fa8-aea5e7f2b4694.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章Informix介绍Informix提供了为开放系统开发和实现信息管理应用的先进产品。核心产品包括应用开发和应用工具,数据库服务器以及中间件。所有的产品都基于ANSI标准的SQL 。INFORMIX-OnLine:快速容错服务器,可以进行联机事务处理方面的应用; INFORMIX-OnLine是Informix 的高性能、容错的、 OLTP 数据库服务器。 OnLine允许在数据库的字段中存放和使用二进制大对象 (BLOBs) ,从而扩展了数据处理使之可以处理多媒体信息。它还允许分布式数据库应用。INFORMIX-SE: 低维护服务器,适用于中、小规模的应用环境;INFORMIX-SE服
2、务器适用于需要多用户的数据库服务器的环境,但是高的可用性 (availability) 和 OLTP 级别的性能不是关键。它适用的环境是多用户共享数据库,运行中、小规模的应用。INFORMIX-SE基于事实上的工业标准的 UNIX 的文件访问方法,即 Informix C-ISAM。Informix产品使用双进程体系结构,它把用户的前端应用代码和后端数据库服务器隔离。应用开发工具或客户端,提供构建和运行应用程序的用户接口。数据库服务器,进行所有的数据处理工作,包括数据的存储和检索。工业标准SQL 用于传送从客户端应用到Informix服务器的数据请求。在双进程体系结构中,客户机和服务器可以位于
3、同一台机器上或是通过网络相连接的不同的机器上。当两个进程运行于不同的机器上时,称之为客户机/服务器体系结构。上图表示Informix产品如何构成双进程体系结构。客户机 /服务器的体系结构有几个优点:性能 隔离前端和后端进程,使得可以为特定的任务来优化软、硬件。灵活性 使用双进程体系结构,前端开发工具可以适用于不同的 Informix 服务器。这 样做,可以使用户选择最适合于自己的应用环境的服务器。从长远的观点来看,开放式的体系结构使得来自于不同厂商的前端开发工具和服务器可以协同工作。节省费用 可以选择适合于应用程序规模的硬件,从而达到最优的性能/价格比。可移植性 应用程序易于移植到不同的机器上
4、。第二章INFORMIX-ESQL/C简介INFORMIX-ESQL/C是一个应用开发工具,它使得构建应用程序的C 程序员拥有一个访问 Informix 数据库的接口。开发人员使用库、头文件和预编译器来直接在C 程序中嵌入INFORMIX-ESQL/C具有众多的组织成库形式的例程来帮助用户使用所有的SQL 数据类型解释状态消息使用 Informix子进程INFORMIX-ESQL/C有时简称为ESQL/CSQL 语句。在使用ESQL/C 之前,必须设置好下面的环境变量:INFORMIXDIRINFORMIX- ESQL/C所位于的目录PATH执行程序的搜索路径用户可以在系统提示符下或在 .pr
5、ofile( B shell )文件或 .login( C shell ) 文件中设置这些变量。如果是在系统提示符下设置环境变量,则用户每次登录时要重新设置它们。如果是在 .profile 或 .login 文件中设置,则用户每次登录时,环境变量会自动被设置。使用 Bourne shell 时,设置环境变量如下:INFORMIXDIR=usr/informix/; export INFORMIXDIRPATH=$INFORMIXDIR/bin:$PATH;export PATH使用 C shell 时,设置如下:setenvINFORMIXDIR/usr/informixsetenvPATH$
6、INFORMIXDIR/bin:$PATH当 用 户 运 行INFORMIX-OnLine时 , 还 应 当 把 环 境 变 量$INFORMIXDIR/lib/sqlturbo,把环境变量TBCONFIG设置为合适的值。运行 INFORMIX-NET、INFORMIX-STAR或 INFORMIX-OnLine环境变量需要设置。SQLEXEC设 置 为时,可能还有其它的ESQL/C 预处理器ESQL/C 的一个主要部件就是它的预处理器。预处理器在把C 的源代码送给C 编译器处理之前,把ESQL/C 代码转换成C 代码。预处理命令从命令行启动,启动时可以有各种不同的参数来说明源文件、预期的结果
7、文件,等等。ESQL/C 预处理器将在其它章节里详细讨论。在本培训手册中,预处理器的名字为esql 。ESQL/C 带了一个示例数据库 stores5 ,该数据库中存放的是一个虚构的运动器材批发商有关的信息。当示例数据库被创建时,使用ESQL/C 的示例源代码也随之被创建。在练习使用ESQL/C 之前,用户应当建立自己的stores5 数据库的拷贝。1.创建一个子目录,用来存放ESQL/C 的例子源文件,输入如下:%mkdir demo%cd demo2.现在,输入下面的命令 (输入时,把 DbName 替换成你所使用的 stores5数据库名 ):确信 DbName 是唯一的。%esqlde
8、mo5 DbName当用户使用自己的stores5 数据库拷贝时,可以进行任意的修改。如果用户想刷新数据库拷贝,只要再次运行esqldemo5 ,将删除现有的数据库拷贝,并按初始的情形下创建一个新的数据库拷贝。Informix 产品提供了一个示例数据库stores5 ,用户可以在系统提示符下输入dbaccessdemo5来创建该数据库。附注用户可以输入dbaccessdemo5 name ,以其它的名字来创建stores5 数据库系统提供的几种数据类型如下:CHAR存放字母、数字和符号的任意组合。NUMBER存放五种数值数据类型中的某种数值。SERIAL存放由 INFORMIX-SQL赋值的连
9、续的整数。DATE存放日期。MONEY存放现金数额。DATE-TIME存放日期和时间。INTERVAL存放表示一段时间的值。VARCHAR存放可变长度的字符数据,仅使用必须的磁盘空间。TEXT一种二进制大对象(BLOB) ,实际上它可以存放任何种类的文本数据。TEXT 字段通常存放备忘录、手稿、商业文档,等等。BYTE一种二进制大对象(BLOB) ,它以一种无区分的字节流形式来存放任意种类的二进制数据,通常是保存的电子表格、程序的装载模块、数字化的声音模板,等等。附注:VARCHAR 、 TEXT 和 BYTE 数据类型仅在使用INFORMIX-OnLine时才有。要获取同数据类型有关的更多的
10、信息,请查阅The Informix Guide to SQL:Reference。第三章在INFORMIX-ESQL/C程序中嵌入SQL语句在 C 程序中嵌入SQL 语句时,要记住下面的规则:为预编译器指明SQL 语句 在SQL 语句之前用美元符号($) 或 ANSI的标准关键字EXEC SQL 来标明。尽管用户可以在C 代码中混用这两种标注方法,但是,为了便于维护,一般不推荐这样做。另外,不要忘记在SQL 语句的最后加上分号( ; ) 。SQL 语句可以有变量,变量可以出现在交互式SQL 语句中常数可以出现的任何位置。这种在可执行的SQL 语句中的变量称为宿主变量(host variabl
11、e) ,将在后面讨论它。可以在能够使用C 的可执行语句的任何地方使用可执行的SQL 语句。宿主变量,即是C 语言中的普通变量,它们可以出现在交互式SQL 语句中常数所在的任何位置上。当在 SQL 语句中使用宿主变量时,必须把它们同SQL 语句中的名称相区分,这样做使得预编译器能够识别出哪些标识符是宿主变量。为从嵌入式的SQL 语句中区分出宿主变量,给宿主变量加上美元符号($)作前缀。如果用户愿意的话,也可以使用ANSI 标准中规定的分号( : ) 来作前缀。(在本手册中,我们将使用美元符号来作标识。)这里是一些例子:UPDATE 语句中的SET 子句,如 $update stock set u
12、nit_price =$NewPriceLd;INSERT语句中的VALUES子句,如 $insert into stock values($StockG_t);UPDATE、 DELETE和SELECT语句中的WHERE子句,例如:$update stock .where manu_code =$MfcodeLc;$delete from orders where order_num =$OrdNoLl;宿主变量是普通的C 变量。既然它们是普通的C 变量,必须把它们说明和定义成某种类型,就象任何别的C 变量一样。宿主变量可以定义为这些类型中的任何一种简单类型 象integer, double
13、,等等。结构数组象其它的C 变量一样, 可以在定义宿主变量的时候初始化它们。但是,因为ESQL/C 预编译器要在编译SQL 语句之前知道宿主变量的存在和类型,所以必须为预编译器标明宿主变量的定义。可以使用美元符号($) 作为定义的前缀来为预编译器标明宿主变量的定义,或者,把定义部分用下面这对语句括起来EXEC SQL BEGIN DECLARE SECTIONEXEC SQL END DECLARE SECTION关于宿主变量和它们的引用有几点其它因素需要考虑。宿主变量和 SQL 数据库对象 (数据库、表、字段、约束、过程,等等 ) 可以同名,即使是在同一个 SQL 语句中。例如,下面的语句是
14、正确的 $update customer set zipcode = $zipcodewhere customer_num = $customer_num;esql 预编译器区分字母的大小写,即对字母的大小写敏感。例如,下面的两个宿主变量是不同的,它们访问的是不同的内存 $char manuCodeC44;$char manucodec44最后,任何使用 $为前缀来定义的变量都可以在标准的C 表达式中使用。例如,下面的gets()对宿主变量的引用是合法的$char DBNameC1111;gets(DBNameC11);$database $DBNameC11;当 SQL 语句之外使用宿主变量
15、时,不能以$为前缀来引用,否则,C 编译器编译时报错。当数据从数据库中取出,送到一个ESQL/C 应用程序时,取得的数据应存放到与SQL数据类型兼容的数据类型中。同样,当数据从应用程序存放到数据库中时,数据类型也应当兼容。如果用户没有说明兼容的宿主变量类型,有些情形可以进行自动的类型转换;如果无法转换,则返回一个错误信息。当接收数据区太小时,如果丢失的是有效数字,则返回错误,如果是字符,则返回警告信息。检测和处理这些错误和警告将在其它的章节中讨论。上图列出了SQL 数据类型和它们对应的C 的宿主变量类型。CHAR 、SMALLINT、INTEGER 、SMALLFLOAT、FLOAT 、SER
16、IAL和 DATE 这些 SQL数据类型都有相对应的C 的数据类型。但是, DECIMAL、 MONEY 、 DATETIME、 INTERVAL和 VARCHAR必须定义特别的ESQL/C 数据类型来与之相对应。后续的章节将全面地描述这些数据类型。ESQL/C 在宿主变量定义时支持类似C 的 typedef 表达式,如上面所示。但是,它们必须以 $符号为前缀,ESQL/C 不处理没有 $符号为前缀的typedef 语句。在上面的例子中,$typedef 创建了一个SMALLINT类型来作为短整型(short int) 使用,然后再定义一个StockNumLs变量,类型为SMALLINT。本例
17、用同样的方法定义了长整型(long int) 的等价的SQL 数据类型DATE 。不能使用 $typedef使用 C 的 typedef来把多维数组或联合表达式时要小心,因为(union) 定义成宿主变量类型。esql 不会展开它们。可以把结构定义为INFORMIX-ESQL/C的宿主对象。上例把stock_t 定义为一个结构模板,然后,使用该模板定义了两个结构变量StockG_t和 ItemG_t 。可以使用嵌套的结构。在可执行的SQL 语句中,可以把结构作为一个整体来使用或引用它的任一部分。当把结构作为整体来使用时, INFORMIX ESQL/C 预编译器把结构的引用展开成对它的各个部分
18、的引用的列表。例如:$insert into stock(stock_num, manu_code)values($StockG_t);等价于$insert into stock(stock_num, manu_code)values($StockG_t.StockNumS,$StockG_t.ManuCodeC);可以把数组定义为INFORMIX-ESQL/C的宿主对象。上例把BufLapc 定义为一个字符指针的数组,而且,它还把UnitSal 定义为一个长整型的数组。在定义数组时,必须使用一个整形值来说明数组的大小。在可执行SQL 语句中,可以 引用数组的任何一个元素。对于 CHAR 类型
19、的数组,可以仅引用数组名。对于其它类型的数组,不能仅引用数组名。在定义宿主变量时,可以使用普通的C 的初始化表达式来进行初始化。但是,对于字符类型的表达式有一个例外:字符串不能有 分号INFORMIX-ESQL/C的关键字预编译器不检查C 语法的正确性;它只是把初始化表达式传递给C 编译器,由C 编译器来检查这类错误。有关宿主变量的作用域范围的规定同一般的C 变量一样。宿主变量是automatic( 局部的 ),除非显式地定义为external或static 。在一个函数中定义的宿主变量对于该函数来说是局部的。函数中的局部宿主变量使得定义在函数外部的同名的变量不可见。在同一个模块中不能多次定义
20、同一个宿主变量。$为确保局部宿主变量对于它所定义的块和$来开始和结束块。ANSI 标准不支持$和 $,在(block) 来说是局部的,使用一对组合的符号5.0 版中可以使用简单的括弧对,和 。块最多可以嵌套16 层。INFORMIX-ESQL/C提供了许多的头文件。(参见上面的列表。)这些文件中定义了许多对象,用户的程序可能会用到它们。这些文件位于$INFORMIXDIR目录的子目录每一个头文件将在后续的合适的章节讨论。可以在程序中包含进一个或多个头文件来简化编程,例如,下面这条语句包含进文件 incl/esql 下。sqlca 头$include sqlca;不要使用include在程序中包
21、含进当预编译器看到sqlca 头文件,可以发现诸如数据库服务器执行SQL 语句是否成功, 等等。$include ,它将读入文件sqlca.h ,并把它插入到用户的代码中。在后续某章中,你将看到如何使用该头文件中的一些结构来检测$include 在其它章节中讨论。SQL语句的执行状态。在访问数据库表和给表添加记录之前,成为当前打开的数据库,使用DATABASE必须激活表所在的数据库。语句 为激活一个数据库使它DATABASE必需的关键字DatabaseName想要选择的数据库的名字DatabaseName 可以是一个指明数据库的标识符、一个存有数据库名字的字符串或指向这样的一个字符串的指针。当
22、为 INFORMIX-SE说明数据库时,如果该数据库既不在当前目录也不在DBPATH环境变量所说明的目录, 则必须在 DATABASE 该变量存放的是数据库的完整路径名(不包括关键字之后跟上一个字符串常数或一个宿主变量,.dbs 后缀)。使用 CLOSE DATABASE语句来关闭当前的数据库。CLOSE DATABASE是必需的关键字在头一个例子中环境变量 TBCONFIG 据库位于当前目录或在第二个例子中,stores 是数据库名。 如果使用的是INFORMIX-OnLine,则该数据库在由指明的 OnLine 的当前实例中。如果使用的是INFORMIX-SE,则该数DBPATH环境变量中
23、存放的目录。stores5 是数据库名。该数据库既不在当前目录也无法通过DBPATH环境变量来访问。 宿主变量DbNameLc80中存放的是数据库的完整路径,路径由stcopy函数拷贝到变量中。尽管可以这样做,但是,在程序中通过编程来获取一个完整的路径名并不是一个好的作法。-第四章编译INFORMIX-ESQL/C程序当使用INFORMIX-ESQL/C预编译器来预处理源文件时,它把所标明的SQL 语句转换成C 的代码。当然,要使用$符号作前缀或用EXEC SQL关键字把SQL 语句包括起来,给预编译器指明SQL 语句的存在。INFORMIX-ESQL/C仅当源文件具有 “ .ec ”后缀时才作这类的转换。INFORMIX-ESQL/C把编译结果存放到与源文件同名但后缀是“ .c”的一个文件中。 例如,预编译 myfile.ec 产生文件myfile.c ,源文件内容myfile.ec 不变。INFORMIX-ESQL/C有取舍地把新产生的C 代码送给C 编译器处理。-用户可以在自己的程序中包含进其它的源文件。例如,你或许想把所有的全局变量的定义放到一个源文件中,然后,通过一个预编译指令把它们自动包含进来。如果该源文件不包含有SQL语句,则可以使用标准的C的预编译语句#includeI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届高考英语读后续写说课稿 追车人
- 2025SRV汽化烟道热喷涂合金防护层施工合同
- 2025民间融资合同范本
- 14《母鸡》(说课稿)-2023-2024学年语文四年级下册统编版
- 2025年驾校培训合同范本
- 2025商品购销合同(超市类)
- 2024年五年级数学下册 一 图形的运动(二)1.2画对称图形说课稿 冀教版
- 2024-2025学年高中历史 第一单元 第一次世界大战 第2课 惨烈的四年战事教学说课稿 岳麓版选修3
- 陶土板幕墙施工方案
- 游乐场植物墙施工方案
- 2024版《安全生产法》考试题库附答案(共90题)
- 疥疮病人的护理
- 2024年江西省中考英语试题含解析
- 公务员2012年国考《申论》真题卷及答案(地市级)
- 新员工三级安全教育考试试题参考答案
- 35kV输变电工程(变电站、输配电线路建设)技术方案
- 数学史简介课件可编辑全文
- 化学废水水池清理施工方案
- 离婚协议书常用范本2024年
- 中学安全办2024-2025学年工作计划
- 2024年山东省东营市中考数学试题 (解析版)
评论
0/150
提交评论