6.在INFORMIX-ESQL/C中使用简单变量

合集下载

Informix数据库基本操作和常用配置

Informix数据库基本操作和常用配置
创建数据库
在控制台输入dbaccess,进入informix管理界面,界面的菜单就不一一解释了,选择database-create输入数据库名,以test为例,回车,dbspace选择test,回车,这一步完了用方向键移到exit选项上,退回到上级菜单,选择Create-new-database,回车即可。完成后一直exit退出管理界面,输入ontape -s -B test修改数据库test日志模式为bufferedlogging,这一步是必须的,否则数据库不支持事务,完成后即可以使用该数据库。Linux下数据库的创建和windows下的一样。简单说一下informix数据库中的四种日志模式:
1、DirtyRead(脏读)隔离
DirtyRead是最简单的隔离级,类同于无隔离级当进程在读数据据时并不对所读的数据上锁,也不管其他进程上没上锁或在做什么。
2、CommittedRead(提交后读)隔离
当进程请求CommittedRead隔离级时,OnLine保证进程得到的数据不是数据库未提交的数据即此时没有其他进程在对这些数据做修改。
U代表Unbufferd(无缓冲日志模式)
B代表bufferd(缓冲日志模式)
A代表Ansi(不常用,不能和其它日志模式转化)
还有一种是N(Nolog)(无日志模式)
各个日志模式之间用ontape -s -代码(U,B,N,A)来进行转换,但转换之前需要修改onconfig文件中的TapeDev和Ltapedev两个参数,指向/dev/null,以免在数据库模式转换的时候进行长时间的0级备份,这两个参数具体含义会在后面说到。
还有一种提高并行性的设置,使用Set Isolation to Committed Read Last Committed语句,为SET ISOLATION TO COMMITTED READ语句引入新的LAST COMMITTED关键字选项,可减少尝试读取表时发生锁定冲突的风险。采用该语句,当用户读取正在被其他用户修改的数据时不在处于锁等待状态,而是可以读取修改前最近落实版本的数据值。这样,由于不会产生锁等待,应用程序效率会显著提高,而且,由于是读取修改前最近落实版本的数据值,也不会产生读取幻象数据(phantom data)的问题,同时,也会大大减少产生死锁的现象。它只支持“行”级别锁定,它不支持以下这些表:正在被DataBlade模块(DataBlade模块是一种标准的软件模块,它可以被插入到数据库中,用以扩展其能力,使用户可以使用任何想要的数据来做任何想做的事情。用户可以融合和匹配来自第三方和Informix的DataBlade模块,或者编写自己的DataBlade模块来创建革新化的商务应用。每个DataBlade模块都包含某一特定领域数据管理的专业知识,可以简单地插入到数据库中,既可以单独使用,又可以与其他DataBlade模块一起使用。有了这种灵活性,用户就可以扩充其DBMS,来解决现在以及将来的特殊数据管理问题。)访问的表、列中具有集合数据类型的表、使用虚拟表界面创建的表、具有页面级别锁定的表、具有专用表级别锁定的表或无事务记录的数据库中的表。在跨服务器的分布式查询中,如果发出查询的会话的隔离级别具有有效的LAST COMMITTED隔离级别,但一个或多个参与操作的数据库不支持该LAST COMMITTED功能,那么整个事务符合发出该事务的会话的“已落实读”或“脏读”隔离级别,而不启用LAST COMMITTED选项。

Informix_ESQLC编程

Informix_ESQLC编程

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

●INFORMIX ESQL/C的特点INFORMIX ESQL/C就是在C语言程序中直接嵌入SQL语句,这样做的目的是使得使用C 语言开发应用程序的开发者能方便的访问数据库,开发出满足各种要求的数据库应用程序。

那么,它与其它INFORMIX开发工具比较有什么特点呢?首先,INFORMIX ESQL/C程序的开发没有一个菜单式的开发界面。

如INFROMIX-4GL程序的开发有一个包含屏幕格式、模块、程序各部分编辑、编译及运行的菜单界面。

而INFROMIX ESQL/C是通过编辑工具如vi等来进行编辑的。

其次,INFROMIX ESQL/C开发需要一个预处理器来进行程序的预编译。

INFORMIX ESQL/C 的编译命令是esql,它完成预编译、编译、链接、生成可执行文件的等工作。

预处理器所做的工作是将ESQL/C的代码转换成C的代码,再调用C的编译器来处理C程序代码。

INFORMIX公司对ESQL/C程序的开发有强劲的支持。

在ESQL/C中不仅可以使用INFORMIX 提供的预编译命令,还可调用INFORMIX提供的库函数和头文件。

●设置开发的环境变量要利用INFORMIX ESQL/C提供以上所述的支持,必须在.profile或.login文件中设置有关环境变量:INFORMIXDIR = INFORMIX ESQL/C的安装目录PATH =$INFORMIXDIR/bin:$PATHSQLEXEC = $INFORMIX/lib/sqlrm /*当ESQL/C版本与SERVER版本不同时*/设置好环境变量后,便可以开始INFORMIX ESQL/C编程了。

●ESQL/C程序的编译及运行用vi或其它编辑器编辑ESQL/C程序,ESQL/C的源程序文件名必须以.ec为后缀。

informixsql函数使用说明大全

informixsql函数使用说明大全

informixsql函数使用说明大全informix sql函数使用说明大全一、内部函数1、内部合计函数1)COUNT(*)返回行数2)COUNT(DISTINCT COLNAME)返回指定列中唯一值的个数3)SUM(COLNAME/EXPRESSION)返回指定列或表达式的数值和;4)SUM(DISTINCT COLNAME)返回指定列中唯一值的和5)AVG(COLNAME/EXPRESSION)返回指定列或表达式中的数值平均值6)AVG(DISTINCT COLNAME)返回指定列中唯一值的平均值7)MIN(COLNAME/EXPRESSION)返回指定列或表达式中的数值最小值8)MAX(COLNAME/EXPRESSION)返回指定列或表达式中的数值最大值2、日期与时间函数1)DAY(DATE/DATETIME EXPRESSION)返回指定表达式中的当月几号2)MONTH(DATE/DATETIME EXPRESSION)返回指定表达式中的月份3)YEAR(DATE/DATETIME EXPRESSION)返回指定表达式中的年份4)WEEKDAY(DATE/DATETIME EXPRESSION)返回指定表达式中的当周星期几5)DATE(NOT DATE EXPRESSION)返回指定表达式代表的日期值6)TODAY 返回当前日期的日期值7)CURRENT[FIRST TO LAST] 返回当前日期的日期时间值8)COLNAME/EXPRESSION UNITS PRECISION 返回指定精度的指定单位数9)MDY(MONTH,DAY,YEAR)返回标识指定年、月、日的日期值10)DATETIME(DATE/DATETIME EXPRESSION)FIRST TO LAST 返回表达式代表的日期时间值11)INTERVAL(DATE/DATETIME EXPRESSION)FIRST TO LAST 返回表达式代表的时间间隔值12)EXTEND(DATE/DATETIME EXPRESSION,[FIRST TO LAST])返回经过调整的日期或日期时间值select current year to second from systablesTo_char函数将datetime和date值转化为字符值。

c语言和INFORMIX数据库

c语言和INFORMIX数据库

Linux系统下C语言编程—怎么向INFORMIX数据库插入数据就是先定义一个结构,给结构赋值,然后把结构里的数据放到informix数据库里面是在UNIX系统下面完成的,知道的朋友能不能给我讲讲。

主要是结构里面的东西怎么往表里面写。

在UNIX下面,用ESQL编程,和C也差不多,就是往里插入SQL语句也可以像C一样的定义变量。

用ESQL/C编程概述使用informix-esql/c语句的C程序通常包括下列元素,本章将逐一讲述:head files头文件include files包含文件host variables宿主变量indicator variables指示变量SQL语句在程序中也可以包含动态定义的语句,将在第九章讲述。

本章提供了下列主题的详细说明:1在esql/c程序中使用头文件2对esql/c提供预处理3在C程序中嵌入SQL语句4识别C变量5处理与编译C程序********************在C程序中嵌入SQL语句SQL语句用$符号或EXEC SQL关键字嵌入到C程序中,使用关键字与ANSI标准一致。

esql/c中的大小写敏感性informix-esql/c预处理器对变量名的大小写不敏感。

由PREPARE语句产生的语句id号和由DECLARE语句产生的游标名默认是不敏感的。

如果希望预处理器对游标名和语句id大小写敏感,可以在esql的命令行中加入-cs参数。

*插入注释你可以用双减号作为注释符号在任何的INFORMIX-ESQL/C行中加入注释。

注释持续到一行的结束。

同时也可以在INFORMIX-ESQL/C行中使用标准的C注释。

如:----------------------------------------------------$database stores5; -- stores5 database is open now!printf("\nDatabase opened\n"); /* This isn’t an ESQL/C line*//* so it needs a regular C notation for a comment*/$begin work; /*You can also use a C comment here*/---------------------------------------------------头文件随informix-esql/c提供有几个头文件,均位于$INFORMIXDIR的/incl子目录下,说明如下:sqlca.h包含有存储了错误状态代码的结构。

6.在INFORMIX-ESQL/C中使用简单变量

6.在INFORMIX-ESQL/C中使用简单变量

第六章在INFORMIX-ESQL/C中使用简单变量融本章讲解如何使用C变量来保存简单的SQL数据,即字符和数值。

使用C变量来保存复杂的SQL数据将在其它的章节里详细讨论。

下面列出来的是复杂的SQL数据类型:●VARCHAR●DECIMAL 和MONEY●DATETIME 和INTERVAL●BYTE 和TEXT融宿主变量存放SQL数据。

正因如此,必须定义兼容的类型来存放SQL数据。

当数据从内存中写到数据库中时,数据库服务器把数据从C的数据类型转换成SQL的数据类型,当把数据从数据库中读到内存中时,Informix把数据从SQL的数据类型转换成C的数据类型。

由用户负责定义适当类型的宿主变量。

上图列出了SQL的数据类型和C的数据类型之间的隐含的关系。

如果没有象上面这样来定义宿主变量,数据库服务器将尝试自动转换(如果转换有意义的话)。

例如,这里举出了两种这样的情形,数据库服务器试图把一种数据类型转换成另一种类型:●在WHERE字句中,把字符字段同整数相比较,如下:where zipcode > 90000●在算术表达式中不同类型的值一起运算,如下:set unit_price = unit_price * ( 1 + $PercentLf )在这类的表达式中,所有的值在运算之前转换成decimal类型。

融INFORMIX-SQL/C使用DECIMAL类型来进行算术表达式中的所有的运算,由结果变量的类型来决定要存储或打印的结果的格式。

表达式中所有的值,如果不是DECIMAL类型,则转换成DECIMAL 类型,而且,运算的结果是DECIMAL类型。

上图中列出了这类表达式里的值在进行转换后的精度和格式。

如果表达式中的某个值是浮点decimal数,则结果是浮点decimal 数。

当结果类型导致精度丢失时,ESQSL/C返回一个错误。

融当把数据从一种类型转换成另一种类型时,数据库服务器可能会遇到问题,从而产生警告或错误信息。

informix sql函数使用说明大全

informix sql函数使用说明大全

informix sql函数使用说明大全一、内部函数1、内部合计函数1)COUNT(*)返回行数2)COUNT(DISTINCT COLNAME)返回指定列中唯一值的个数3)SUM(COLNAME/EXPRESSION)返回指定列或表达式的数值和;4)SUM(DISTINCT COLNAME)返回指定列中唯一值的和5)AVG(COLNAME/EXPRESSION)返回指定列或表达式中的数值平均值6)AVG(DISTINCT COLNAME)返回指定列中唯一值的平均值7)MIN(COLNAME/EXPRESSION)返回指定列或表达式中的数值最小值8)MAX(COLNAME/EXPRESSION)返回指定列或表达式中的数值最大值2、日期与时间函数1)DAY(DATE/DATETIME EXPRESSION)返回指定表达式中的当月几号2)MONTH(DATE/DATETIME EXPRESSION)返回指定表达式中的月份3)YEAR(DATE/DATETIME EXPRESSION)返回指定表达式中的年份4)WEEKDAY(DATE/DATETIME EXPRESSION)返回指定表达式中的当周星期几5)DATE(NOT DATE EXPRESSION)返回指定表达式代表的日期值6)TODAY 返回当前日期的日期值7)CURRENT[FIRST TO LAST] 返回当前日期的日期时间值8)COLNAME/EXPRESSION UNITS PRECISION 返回指定精度的指定单位数9)MDY(MONTH,DAY,YEAR)返回标识指定年、月、日的日期值10)DATETIME(DATE/DATETIME EXPRESSION)FIRST TO LAST 返回表达式代表的日期时间值11)INTERVAL(DATE/DATETIME EXPRESSION)FIRST TO LAST 返回表达式代表的时间间隔值12)EXTEND(DATE/DATETIME EXPRESSION,[FIRST TO LAST])返回经过调整的日期或日期时间值To_char函数将datetime和date值转化为字符值。

Informix数据库参数设置说明资料

Informix数据库参数设置说明资料

Informix数据库参数设置说明
本说明从INFORMIX数据库的认证授权功能、安全日志功能,和其他自身安全配置功能提出安全要求。

1.账号
INFORMIX应提供账号管理及认证授权功能,并应满足以下各项要求。

编号:安全要求-设备-INFORMIX-配置-1
编号:安全要求-设备-INFORMIX-配置-2
2.口令
编号:安全要求-设备-INFORMIX-配置-4
编号:安全要求-设备-INFORMIX-配置-5
编号:安全要求-设备-INFORMIX-配置-29-可选
编号:安全要求-设备-INFORMIX-配置-6-可选
编号:安全要求-设备-INFORMIX-配置-7-可选
3.授权
编号:安全要求-设备-INFORMIX-配置-9
4.日志
编号:安全要求-设备-INFORMIX-配置-12
编号:安全要求-设备-INFORMIX-配置-28
5.其他
编号:安全要求-设备-INFORMIX-配置-36-可选
编号:安全要求-设备-INFORMIX-配置-37-可选。

informix学习总结

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 intrvl VARCHAR 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) 把⼀块内存的内容拷贝到另⼀块内存。

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

第六章在INFORMIX-ESQL/C中使用简单变量融本章讲解如何使用C变量来保存简单的SQL数据,即字符和数值。

使用C变量来保存复杂的SQL数据将在其它的章节里详细讨论。

下面列出来的是复杂的SQL数据类型:●VARCHAR●DECIMAL 和MONEY●DATETIME 和INTERVAL●BYTE 和TEXT融宿主变量存放SQL数据。

正因如此,必须定义兼容的类型来存放SQL数据。

当数据从内存中写到数据库中时,数据库服务器把数据从C的数据类型转换成SQL的数据类型,当把数据从数据库中读到内存中时,Informix把数据从SQL的数据类型转换成C的数据类型。

由用户负责定义适当类型的宿主变量。

上图列出了SQL的数据类型和C的数据类型之间的隐含的关系。

如果没有象上面这样来定义宿主变量,数据库服务器将尝试自动转换(如果转换有意义的话)。

例如,这里举出了两种这样的情形,数据库服务器试图把一种数据类型转换成另一种类型:●在WHERE字句中,把字符字段同整数相比较,如下:where zipcode > 90000●在算术表达式中不同类型的值一起运算,如下:set unit_price = unit_price * ( 1 + $PercentLf )在这类的表达式中,所有的值在运算之前转换成decimal类型。

融INFORMIX-SQL/C使用DECIMAL类型来进行算术表达式中的所有的运算,由结果变量的类型来决定要存储或打印的结果的格式。

表达式中所有的值,如果不是DECIMAL类型,则转换成DECIMAL 类型,而且,运算的结果是DECIMAL类型。

上图中列出了这类表达式里的值在进行转换后的精度和格式。

如果表达式中的某个值是浮点decimal数,则结果是浮点decimal 数。

当结果类型导致精度丢失时,ESQSL/C返回一个错误。

融当把数据从一种类型转换成另一种类型时,数据库服务器可能会遇到问题,从而产生警告或错误信息。

当把数据转换成字符类型时,可能遇到的唯一问题是接收区太小,这样会产生一个警告。

下面就是产生警告信息的两个例子:●一个字段定义为char(5),而用户试图插入字符串“HeritageFurniture”。

在本例中,字符串被截断,字段存放的字符串为“Herit”。

●一个字段定义为char(5),而用户试图插入六位数字的整数940852。

此处,该数字被忽略,字段中存放的是由五个星号组成的字符串。

当把数据转换成某些数值类型时,可能遇到的唯一问题是有效数字的丢失,这样就会导致产生一个错误。

下面就是产生错误信息的两个例子:●一个字段定义为DATE类型,而用户试图把获取的一个日期值存放到一个短整型的宿主变量中。

●一个字段存放的是邮政编码,定义为类型char(5),用户试图把获取到的邮编值“94085”存放到一个短整型的宿主变量中。

●在这两种产生错误的情形里,都是接收区太小。

如果进行数据转换的话,将会丢失有效数字。

所以,两个宿主变量存放的都是未定义值。

融存贮到磁盘上时,如果SQL字符值的长度比分配的空间要短,则使用空格来填充。

CHAR宿主变量接受以连续空格结尾的SQL数据,并在数组的末尾加上一个空值作为结束符。

为避免数据被截断,定义时类型的长度要比SQL数据的长度大一。

ESQL/C可以定义指向字符串的指针,但是,它们作为宿主变量时,不能指向单个字符。

所有字符类型的数据,除一个例外,都当作以空值结尾的数组。

例如,定义单个字符变量或只有一个元素的字符数组:$char AnswerLc;$char AnswerLc[1];数据库服务器返回值时,以空值结束字符串,这样可能重写邻近的内存。

同时,当它从用户程序接收值时,查找作为结束符的空值。

所以,字符指针指向的空间必须足够大,以存放所需要的数据。

该代码段示例了指向字符的指针的正确用法:$char *BufLcp[ARRAY];BufLcp = calloc(ARRAY,2);stcopy(“y”,BufLcp[0]);$update orders ... where backlog = $BufLcp[0];当使用字符指针来从SELECT语句接收数据,预编译器给出一个警告,而且,数据可能被截断。

融除了CHAR和*CHAR,INFORMIX-ESQL/C提供另两种数据类型:STRING和FIXCHAR。

还有另一种字符类型VARCHAR,因为它是一种复杂类型,将在别的章节讨论。

STRING类型在加上空值结束符时,截断结尾的空格。

为避免截断数据,把该类型的长度定义为比SQL数据的长度大一,以容纳空值。

FIXCHAR同CHAR一样,除了不加上结尾的空值来结束字符串。

为避免截断数据,把该类型的长度定义为同SQL数据的长度一样。

通常使用前面讲述的四种字符类型之一来存放SQL字符数据。

虽然有时可能需要使用变长的SQL字符数据(定义为VARCHAR),SQL 字符数据存放在数据库中时是定长的。

VARCHAR类型将在其它的章节讨论。

融Informix提供了许多库函数来操作各种数据类型。

例如,可以在C 程序中使用这些函数来操作字节串和字符,以及从一种类型转换到另一种类型。

当使用esql来编译程序时,shell脚本将自动链接该库。

依赖于特定的平台,这些函数中有一部分是用汇编语言编写成的,所以,它们通常比标准的C库中相应的函数要快得多。

下面这些ESQL/C函数是用汇编语言编写的:bycmpr( ) bycopy( ) byfill( )ESQL/C库函数返回值,除非特别说明,返回0表示执行成功;返回负值表示失败。

在上面的例子代码中,函数rstoi( )把存放在LineLc80中的字符串转换成一个整数,并把结果存放到StockNumLi中。

融ESQL/C的库中有六个函数用来操作以空值结束的字符串。

rdownshift(s) 把一个字符串中的所有的字母转换成小写。

char *s;指向操作串的指针。

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

char *s;指向操作串的指针。

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

char *s;指向操作串的指针。

char *dest;指向目标串的指针。

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

char *s1;指向第一个串的指针。

char *s2;指向第二个串的指针。

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

char *from;指向操作字符串的指针。

char *to;指向目标字符串的指针。

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

char *string;指向操作串的指针。

最后四个函数的功能各自类似于相应的C函数:strcat、strcmp、strcpy、strlen。

$include sqlca;main(){static char str1[] = "STRING1"; static char str2[] = "STRING2"; short errLs;errLs = rdownshift(str1);printf("%s\n",str1);errLs = rupshift(str1);printf("%s\n",str1);errLs = stcat(str1,str2);printf("%s\n",str2);errLs = stcmpr(str1,str2);if (errLs == 0)printf("strings are equal\n"); if (errLs < 0)printf("str1 < str2\n");if (errLs > 0)printf("str1 > str2\n");errLs = stcopy(str1,str2);printf("%s\n",str2);errLs = stleng(str1);printf("length is %d \n",errLs);}融ESQL/C的库中有四个函数用来操作定长的字符串,即不以空值结束的字符串。

bycmpr(byte1,byte2,len) 比较两组连续的字节内存块。

char *byte1;指向第一组字节内存块的指针。

char *byte2;指向第二组字节内存块的指针。

int len;要比较的字节数目。

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

char *from;指向操作的字节内存块。

char *to;指向目的内存块。

int len;要拷贝的字节数目。

byfille(to,len,ch) 把指定的内存块用字符来填充。

char *to;指向要填充的内存块的指针。

int len;要填充字符数目。

char ch;要填充的字符。

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

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

char *from;指向定长串的指针。

int count;字符串中的字符的数目。

$include sqlca;main(){static char str1[] = "STRING1";static char str2[] = "STRING2";short errLs;errLs = bycmpr(str1,str2,sizeof(str1));if (errLs == 0)printf("bytes are equal \n");if (errLs < 0)printf("bytes of str1 < bytes of str2\n"); if (errLs > 0)printf("bytes of str1 > bytes of str2\n"); errLs = bycopy(str1,str2,sizeof(str1));printf("%s\n",str2);errLs = byleng(str1,sizeof(str1));printf("size of bytes are: %d\n",errLs);errLs = byfill(str1,5,'x');printf("%s \n",str1);融ESQL/C的库中有两个函数用来操作字符类型的数据:ldchar(from,num,to) 把定长的字符串拷贝°到以空值结束的字符串。

相关文档
最新文档