informix学习总结.docx

上传人:b****3 文档编号:5927151 上传时间:2023-05-09 格式:DOCX 页数:17 大小:271.64KB
下载 相关 举报
informix学习总结.docx_第1页
第1页 / 共17页
informix学习总结.docx_第2页
第2页 / 共17页
informix学习总结.docx_第3页
第3页 / 共17页
informix学习总结.docx_第4页
第4页 / 共17页
informix学习总结.docx_第5页
第5页 / 共17页
informix学习总结.docx_第6页
第6页 / 共17页
informix学习总结.docx_第7页
第7页 / 共17页
informix学习总结.docx_第8页
第8页 / 共17页
informix学习总结.docx_第9页
第9页 / 共17页
informix学习总结.docx_第10页
第10页 / 共17页
informix学习总结.docx_第11页
第11页 / 共17页
informix学习总结.docx_第12页
第12页 / 共17页
informix学习总结.docx_第13页
第13页 / 共17页
informix学习总结.docx_第14页
第14页 / 共17页
informix学习总结.docx_第15页
第15页 / 共17页
informix学习总结.docx_第16页
第16页 / 共17页
informix学习总结.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

informix学习总结.docx

《informix学习总结.docx》由会员分享,可在线阅读,更多相关《informix学习总结.docx(17页珍藏版)》请在冰点文库上搜索。

informix学习总结.docx

informix学习总结

INFORMIX的学习

第一章ESQL/C的数据类型

数据类型

SQL与C数据类型的对应

简单类型

SQL?

?

?

?

C

CHAR(n)?

?

?

?

?

char(n+1)

CHARCTER(n)?

?

?

char*

SMALLINT?

?

?

?

?

shortint

INTERGER

INT?

?

?

?

?

longint

SMALLFLOAT

REAL?

?

?

?

?

float

FLOAT

DOUBLEPRECISIONdouble

SERIAL?

?

?

?

?

longint

DATE?

?

?

?

?

longint

复杂类型

SQL?

?

?

?

?

C

DECIMAL

DECNUMERIC?

?

?

?

?

dec_torstructdecimal

MONEY?

?

?

?

?

dec_torstructdecimal

DATETIME?

?

?

?

?

dtime_torstructdtime

INREVER?

?

?

?

?

?

?

intrvl_torstructintrvl

VARCHAR?

?

?

?

?

?

?

varcharorstring

数据类型转换

转换类型?

转换后

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(charbyte1,byte2,rptlen)?

比较两组连续的字节内存块。

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

byfill(char*to,intlen,charch)?

?

?

用字符填充指定的内存块。

byleng(charfrom,intcount)?

?

?

?

统计有效字符的数目。

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

3、字符串操作函数

ldchar(char*from,intnum,char*to)?

拷贝定长串到空值结尾的串。

stchar(char*from,char*to,intnum)?

拷贝空值结尾的串到定长串。

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*frmtchar*str)?

生成具有确定格式的日期字符串。

(str字符串和fmt必须按月、日、年的同一顺序)

返回代码:

?

?

?

0操作成功。

?

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

?

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

?

-1209由于str中没有包含年、月、日各部分间的定界符,str的长

度必须准确定义为6或8个字节长。

?

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

fmt和str的有效组合

?

fmt?

?

?

?

?

?

?

?

str

?

“mmddyy”?

?

?

?

?

“DEC25th1997”

?

“mmm.dd.yyyy”?

?

“dec251997”

?

“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”?

?

?

?

“Intheyear1997,themonthofDecember,its25thday”

?

“dd-mm-yy”?

?

?

?

“This25thdayofDecember,1997”

rmdyjul(shortmdy[3],long*jdate)用三个短整数生成一个内部日期这三个整数是有关年、月、日的数字值。

(年必须以完整的形式表达)

返回代码:

?

?

?

0操作成功。

?

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

?

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

?

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

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

rtoday(long*jdate)?

?

?

?

?

从系统日期创建一个内部日期值。

2、从内部日期转换成其他类型

rfmtdate(lingjdate,char*fmt,char*str)从内部格式的日期类型值创建格式化的字符串。

返回代码:

?

?

?

0操作成功。

?

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

?

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

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

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

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

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

返回值:

?

TRUE

(1)?

?

是闰年

?

FALSE(0)?

?

不是闰年

简单数值类型的格式化函数

rfmtdouble(doubledbval,char*fmt,char*str)将双精度格式化为指定的模板格式。

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

可以构成格式模板串的字符:

*以星号代替空格。

&以0代替空格。

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

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

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

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

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

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

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

$显示美元符号。

处理空值的数值类型函数

risnull(inttype,char*cvar)?

检查C变量是否为空值。

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

(五)其他函数

typalign(intpos,inttype)返回一具有指定数据类型变量的下一个位置。

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

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

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

ESQL/C数据类型的进一步说明

DECIMAL数据类型的使用

1、DECIMAL函数——把C的数据类型转换为DECIMAL值

deccvasc(char*from,intlen,dec_t*to)把ASCII字符串转换成DECIMAL值。

返回值:

0转换成功

-1200数字太大,上溢。

-1201数字太小,下溢。

-1213存在非数值字符。

-1216存在错误指数。

注意事项:

(1)字符串的前导空格被忽略。

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

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

deccvint(intfrom,dec_t*to)?

?

把C的整数转化成DECIMAL值。

deccvlong(longfrom,dec_t*to)?

把C的长整数转化成DECIMAL值。

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

2、DECIMAL函数——把DECIMAL值转换成字符型

dectoasc(dec_t*from,char*to,intlen,intrt)把DECIMAL值转换成ASCII字符串。

说明:

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

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

注意事项:

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

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

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

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

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

decfcvt(dec_t*from,intndgt,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

0dec1=dec2

1dec1>dec2

?

?

?

?

?

DECUNKNOW有一个是空值

deccopy(dec_t*dec1,dec_t*dec2);

decround(dec_t*dec1,intscale);

dectrunc(dec_t*dec1,intscale);

DATETIME和INTERVAL使用方式及实例

1、概述

DATETIME数据类型存放时间,时间由以下部分组成:

YEAR,MONTH,DAY,HOUR,MINUTE,SECOND和秒的FRACTION(n)。

INTERVAL数据类型存放时间间隔,组成部分同上。

定义宿主变量:

DATETIME?

LargestQulifier?

TO?

SmallQulifier

INTERVAL?

LargestQulifier?

TO?

SmallQulifier

限定词:

YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,FRACTION(n)

也可以不指明修饰符,直接定义。

2、DATETIME和INTERVAL宏及转换函数

在头文件datetime.h中定义了8个名字和5个宏,可以在操作DATETIME和INTERVAL值时使用它们。

名字

TU_YEAR用于YEAR修饰符域的名字

TU_MONTH

TU_HOUR

TU_DAY

TU_MINUTE

TU_SECOND

TU_FRAC用于开始的fraction修饰符域的名字

TU_Fn用于结束的fraction(n)修饰符域的名字(n=1~5)

TU_LEN(q)

TU_START(q)

TU_END(q)

TU_DTENCODE(s,e)

TU_IENCODE(p,s,e)

3、DATETIME和字符串之间的转换函数

dtcvasc(char*from,dtime_t*to)把ANSI兼容的字符串转换为DATETIME值

dtcvfmtasc(char*from,char*fmt,dtime_t*to)把格式化的字符串转换为DATETIME值。

dttoasc(char*from,dtime_t*to)

dttofmtasc(char*from,dtime_t*to,intlen,char*fmt)

4、操作DATETIME值的函数

dtcurrent(dtime*to)把当前日期和时间赋给一个DATETIME变量。

dtextent(dtime_t*from,dtime*to)拷贝DATETIME值,使用的是不同的修饰符。

5、INTERVAL转换函数

incvasc(char*from,intrvl_t*to)把ANSI兼容的字符串转换为INTERVAL值

incvfmtasc(char*from,char*fmt,intrvl_t*to)把格式化的字符串转换为INTERVAL值。

intoasc(char*from,intrvl_t*to)

intofmtasc(char*from,intrvl_t*to,intlen,char*fmt)

6、提供DATETIME和INTERVAL算术操作的函数

rdtaddinv(dec_t*dt,intdg,dec_t*in,intiq,dec_t*sum)把一个INTERVAL值加到一个DATETIME值上。

rdtsub(det_t*dt2,intdq2,dec_t*dt1,intdq1,dec_t*dt0,intdq0)求两个DATETIME值的差。

7、DATE类型和DATETIME类型之间的转换

DATE→DATETIME

定义一个带有修饰符“yeartoday”的DATETIME变量

使用rfmtdate()函数把DATE值转换为一个字符串,使用的模板是yyyy-mm-dd

使用dtcvasc()函数把字符串转换成DATETIME类型变量的值。

如果需要的话,可以使用dtextend()函数来调整DATETIME的修饰符。

DATETIME→DATE

使用dtextend()函数把DATETIME的修饰符调整为“yeartoday”。

使用dttoasc()函数以模板yyyy-mm-dd创建一个字符串。

使用rdefmtdate()函数以模板yyyy-mm-dd把字符串转换为一个DATE值。

8、有关DATETIME和INTERVAL值的其他运算

rinvtodec(dec_t*v,intq,dec_t*dec)把INTERVAL或DATETIME类型的值转换成DECIMAL类型

redectoinv(dec_t*dec,dec_t*v,intq)把DECIMAL值转换成INTERVAL或DATETIME类型值

第二章游标的使用

声明一个游标

DECLAREthe_itemCURSORFOR

SELECTorder_num,item_num,stock_num

INTOo_num,i_num,s_num

FROMitems

打开一个游标

OPENthe_item

因为这是数据库第一次收到查询,所以这也是检测许多错误的时机。

打开游标后,程序应检查SQLCODE的值。

如果它包含了一个负数值,那么,游标是不可用的。

SELECT语句中也许会有错误,任何错误都可能使得数据库服务器不能执行语句。

如果SQLCODE是0,表明SELECT语句的语法正确,游标可以使用。

但是,在这一点上,程序并不知道游标能否返回数据行。

取出行

DECLAREthe_itemCURSORFOR

SELECTorder_num,item_num,stock_num

INTOo_num,i_num,s_num

FROMitems

OPENthe_item

WHILEsq1code=0

FETCHthe_item

IFsq1code=0THEN

DISPLAYo_num,i_num,s_num

ENDIF

ENDWHILE

判断数据结束

DECLAREthe_itemCURSORFOR

SELECTorder_num,item_num,stock_num

FROMitems

OPENthe_item

IFsq1code=0THEN

FETCHthe_item--fetchfirstrow

ENDIF

WHILEsq1code=0

DISPLAYo_num,i_num,s_num

FETCHthe_item

ENDWHILE

定位INTO子句

INTO子句给出了宿主变量的名字,由这些宿主变量接收数据库服务器返回的数据。

宿主变量的名字必须在SELECT或FETCH语句中的一个中出现,但不能在二者中都出现。

下面是重新编写的在FETCH语句中指定宿主变量的例子:

DECLAREthe_itemCURSORFOR

SELECTorder_num,item_num,stock_num

FROMitems

OPENthe_item

WHILEstatus=0

FETCHthe_itemINTOo_num,i_num,s_num

IFstatus=0THEN

DISPLAYo_num,i_num,s_num

ENDIF

ENDWHILE

第三章FOREACH语句

例:

第四章存储过程

简单的存储过程

如何创建存储过程

CREATEPROCEDURE过程名(参数1,参数2,……)

RETURNING类型1,类型2,……;--返回值类型

?

DEFINE变量1类型1;

DEFINE变量2类型2;

………………;

SELECT表字段1,表字段2,……

INTO变量1,变量2,……

FROM表名

WHERE条件;--与参数有关

?

RETURN变量1,变量2,……;

?

ENDPROCEDURE;

数据传递

向存储过程传递数据

由存储过程返回数据

 

第一次调用过程返

事务处理

应付发生在数据修改过程中所发生的任何类型的错误的最好办法是使用事务日志。

当发生任何错误时,你能够告诉数据库服务器回滚到原来的状态。

下面是前一个例子使用事务的情况:

$beginwork;/*startthetransaction*/

$deletefromitems

whereorder_num=$onum;

del_result=sqlca.sqlcode;/*savetwoerror*/

del_isamno=aqlca.sqlerrd[1];/*...codenumbers*/

del_rowcnt=sqlca.sqlerrd[2];/*...andcountofrows*/

if(del_result<0)/*someproblem,*/

$rollbackwork;/*...puteverythingback*/

else/*everythingworkedok,*/

$commitwork;/*...finishtransaction*/

这个例子中关键的一点是程序在结束事务前先把重要的返回值存储在SQLCA中。

其原因是和所有的SQL语句一样,ROLLABCKWORK和COMMITWORK语句在SQLCA中设置返回代码。

除非事先保存好错误代码,否则在错误发生后执行ROLLBACKWORK语句会清除原来的错误代码,也就不能向用户报告了。

使用事务的优点是无论发生了什么错误,数据库都处于一种可知的、可预计的状态。

关于到底修改操作完成了多少的问题不会存在,要么全部完成,要么什么都没改。

错误处理

GEGIN

ONEXCEPTIONIN

(-206,--tabledoesn’texist

-207—columndoesn’texist

)SETerr_num

ENDEXCEPTIONWITHRESUME

自定义异常

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2