




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选文库 INFORMIX 的学习 第一章 ESQL/C 的数据类型 数据类型 SQL与C数据类型的对应 简单类型 SQL CHAR( n) CHARCTE(Rn) char(n+1) char * SMALLINT short int INTERGER INT long int SMALLFLOAT REAL float FLOAT DOUBLE PRECISIONdouble SERIAL DATE long int long int 复杂类型 SQL DECIMAL DEC NUMERIC dec_t or struct decimal MONEY DATETIME INREVER VA
2、RCHAR dec_t or struct decimal dtime_t or struct dtime intrvl_t or struct intrvl varchar or string 数据类型转换 转换类型 转换后 FLOAT DECIMAL( 16) SMALLFLOAT DECIMAL( 8) INTERGER DECIMAL(10, 0) SAMLLINT DECIMAL(5, 0) 数据类型的转换函数 有关CHAR类型的函数 1、以空值结尾的串的操作函数 13 rdown shift(char *s) rup shift(char *s) stcat(char *s, ch
3、ar *dest) stc mp r(char *s1, char *s2) stc opy (char *from, char *to) stle ng(char *stri ng) 比较两组连续的字节内存块。 把一块内存的内容拷贝到另一块内存。 用字符填充指定的内存块。 统计有效字符的数目。有效字符是指字符串 拷贝定长串到空值结尾的串。 拷贝空值结尾的串到定长串。 把一个字符串中的所有字母转换成小写形式。 把一个字符串中的所有字母转换成大写形式。 把一个字符串同另一个字符串相连接。 比较两个字符串。 把一个字符串拷贝到另一个字符串。 统计字符串的长度。 2、定长串的操作函数 bycm pr
4、(char byte1, byte2, rpt len) byc opy (char *from, char *to, int len) byfill(char *to, int len, char ch) byle ng(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) rstoi(char *str, i
5、nt *in tval) rstol(char *str, l ong *ln gval) 把以空值结束的字符串转换成C的double型 把以空值结束的字符串转换成C的int类型。 把以空值结束的字符串转换成C的long类型。 DATE类型的函数 1、创建内部日期 rdefmtdate(lo ng *jdate, char *frmt char *str) 字符串和fmt必须按月、日、年的同一顺序) 返回代码: 0操作成功。 在str参数中有非法的月份。 在str参数中有非法的日期。 由于str中没有包含年、月、日各部分间的定界符, -1204 -1206 -1209 生成具有确定格式的日期字
6、符串。( str str的长 度必须准确定义为 6或8个字节长。 -1212fmt中没有包含年、月、日部分。 fmt和str的有效组合 fmt “ mmddyy “ mmm.dd.yyyy ” “ mmm.dd.yyyy ” “ mmm.dd.yyyy ” “ mmm.dd.yyyy ” “ yy/mm/dd ” “yy/mm/dd ” “yy/mm/dd ” “ dd-mm-yy ” -1204 -1205 -1206 将一个字符串日期转换成一内部格式的日期。 从系统日期创建一个内部日期值。 rfmtdate(l ing jdate, char *fmt, char *str) 返回代码:
7、0操作成功。 -1210内部日期不能被转换成月-日-年格式。 -1211程序存储溢出,即存储分配错误。 从内部格式的日期类型值创建格式化的字符串。 rjulmdy(lo ng jdate, short mdy3)从一个内部日期生成一个含有3个短整数的数组对应内部 日期的月、日、年。 rdatestr(lo ng jdate, char *str) 从一个内部日期值创建缺省的日期字符串。 rdayofweek(l ong jdate) 给定一内部格式表示的日期,此函数返回所对应的星期中的某一天。 rlea py ear(i nt year) 返回值: TRUE( 1) FALSE( 0) 用来判
8、断给定的年份是否为闰年。 是闰年 不是闰年 str “DEC 25th 1997 ” “dec 25 1997 ” “DEC-25-1997” “12251997” “12/25/1997 ” “97/12/25 ” “1997,December, 25th “ In the year 1997, the month of December, its 25th day “ This 25th day of December, 1997” rmdyjul(short mdy3, lo ng *jdate)用三个短整数生成一个内部日期这三个整数是有关年、 月、日的数字值。(年必须以完整的形式表达)
9、 返回代码: 0操作成功。 在mdy2中有非法年份。 在mdy1中有非法月份。 在mdy0中有非法日期。 rstrdate(char *str, l ong *jdate) rtoday(lo ng *jdate) 2、从内部日期转换成其他类型 简单数值类型的格式化函数 将双精度格式化为指定的模板格式。 将长整型值格式化为指定的模板格式。 rfmtdouble(double dbval, char *fmt, char *str) rfmtlo ng(double Ion gval, char *fmt, char *str) 可以构成格式模板串的字符: *以星号代替空格。 dect olon
10、 g(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操作产生下溢
11、 -1202试图用零作除数 3、DECIMAL函数DECIMAL操作 deccm p( dec_t *dec1, dec_t *dec2); 返回值: -1dec1dec2 DECUNKNOW一个是空值 decc opy (dec_t *dec1, dec_t *dec2); decro un d(dec_t *dec1, int scale); dectr un c(dec_t *dec1, int scale); DATETIMES INTERVAL使用方式及实例 1、概述 DATETIME数据类型存放时间,时间由以下部分组成: 和秒的 FRACTIONSn)。 INTERVAL数据类型存
12、放时间间隔, YEAR MONT, DAY HOUR MINUTE SECOND 组成部分同上。 定义宿主变量: DATETIME LargestQulifier INTERVAL LargestQulifier 限定词: YEAR MONTH DAY HOUR MINUTE SECOND FRACTION(n) 也可以不指明修饰符,直接定义。 TO SmallQulifier TO SmallQulifier 2、DATETIME和 INTERVAL宏及转换函数 在头文件datetime.h 中定义了 8个名字和5个宏,可以在操作 DATETIME和INTERVAL值时使用 它们。 名字 T
13、U_YEARi于YEAR修饰符域的名字 TU_MONTH TU_HOUR TU_DAY TU_MINUTE TU_SECOND TU_FRA(用于开始的fraction 修饰符域的名字 TU_Fn用于结束的fraction(n)修饰符域的名字(n=15) 宏 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) dtcvfmtasc(char *from, char *fmt, dtime_t *to)
14、dttoasc(char *from, dtime_t *to) dttofmtasc(char *from, dtime_t *to, int len, char *fmt) 4、操作DATETIME值的函数 dtcurre nt(dtime *to)把当前日期和时间赋给一个 把ANSI兼容的字符串转换为 DATETIME值 把格式化的字符串转换为 DATETIME值。 DATETIME变量。 dtextent(dtime_t *from, dtime *to)拷贝 DATETIME值,使用的是不同的修饰符。 5、INTERVAL转换函数 incvasc(char *from, intrvl
15、_t *to)把 ANSI 兼容的字符串转换为INTERVAL值 in cvfmtasc(char *from, char *fmt, i ntrvl_t *to)把格式化的字符串转换为 in toasc(char *from, in trvl_t *to) in tofmtasc(char *from, in trvl_t *to, int len, char *fmt) INTERVAL值。 6、提供DATETIME和INTERVAL算术操作的函数 rdtadd in v(dec_t *dt, i nt dg, dec_t *in, int iq, dec_t *sum) 个DATETIM
16、E值上。 rdtsub(det_t *dt2, i nt dq2, dec_t *dt1, i nt dq1, dec_t *dt0, i nt dq0) 值的差。 把一个INTERVAL值加到一 求两个DATETIME 7、DATE类型和 DATETIME类型之间的转换 DATP DATETIME 定义一个带有修饰符“ year to day ”的DATETIME变量 使用rfmtdate()函数把DATE值转换为一个字符串,使用的模板是 使用dtcvasc()函数把字符串转换成 DATETIME类型变量的值。 如果需要的话,可以使用dtextend()函数来调整DATETIME的修饰符。
17、yyyy-mm-dd DATETIMP DATE 使用dtextend()函数把DATETIME的修饰符调整为“ year to day ”。 使用dttoasc()函数以模板yyyy-mm-dd创建一个字符串。 使用rdefmtdate() 函数以模板yyyy-mm-dd把字符串转换为一个 DATE直。 8、有关DATETIME和INTERVAL值的其他运算 rin vtodec(dec_t *v, int q, dec_t *dec) 类型 redect oin v(dec_t *dec, dec_t *v, int q) 把INTERVAL或DATETIME类型的值转换成 DECIMAL
18、 把DECIMAL值转换成INTERVAL或DATETIME类型值 第二章游标的使用 声明一个游标 DECLARE the_item CURSOR FOR SELECT order_ nu m, item_ num, stock_ num INTO o_num, i_num, s_num FROM items 打开一个游标 OPEN the_item 因为这是数据库第一次收到查询,所以这也是检测许多错误的时机。打开游标后, 程序应检查 SQLCODE的值。如果它包含了一个负数值,那么,游标是不可用的。 SELECT语句中也许会有错误,任何错误都可能使得数据库服务器不能执行语句。 如果SQLCO
19、DE是0,表明SELECT语句的语法正确,游标可以使用。但是,在 这一点上,程序并不知道游标能否返回数据行。 取出行 DECLARE the_item CURSOR FOR SELECT order_ nu m, item_ num, stock_ num INTO o_num, i_num, s_num FROM items OPEN the_item WHILE sq1code = 0 FETCH the item IF sq1code = 0 THEN DIS PLAY o_n um, i_ num, s_num END IF END WHILE 判断数据结束 DECLARE the_i
20、tem CURSOR FOR SELECT order_ nu m, item_ num, stock_ num FROM items OPEN the_item IF sq1code = 0 THEN FETCH the_item - - fetch first row END IF WHILE sq1code = 0 DIS PLAY o_n um, i_ num, s_num FETCH the_item END WHILE 定位INTO子句 INTO子句给出了宿主变量的名字,由这些宿主变量接收数据库服务器返回的数 据。宿主变量的名字必须在 SELECT或FETCH语句中的一个中出现,
21、但不能在二者中 都出现。下面是重新编写的在FETCH语句中指定宿主变量的例子: DECLARE the_item CURSOR FOR SELECT order_ nu m, item_ num, stock_ num FROM items OPEN the_item WHILE status = 0 FETCH the_item INTO o_n um, i_ num, s_num IF status = 0 THEN DIS PLAY o_num, i_num, s_num END IF END WHILE 第三章FOREACH语句 FOREACH语句构成的循环允许操纵数据库的多行数据。
22、FOREACH循环的执行过程类似于使用游标(cursor).当FOREACH语句执行时, ffi 库服务养执行下列动作, L声明并打开一T游标* 取出由wku语句产生的结果婁中的第一行数或者由所调用的存储过程返回结果 中的第一组數; 3-将得到的据分别W黔变酸列表中的毎一个变it, 4+执行循环体涪句, 5*取结果集中的F-组數,跳到第3步, 乩当结果集为空时循环终止.并且关闭游标. 在FOREACH谱句的循坏棒中可以包含另一条FOREACH语句.产生iST标嵌套,嵌査 的层次在理论上没有限制 能够返冋多组数摇的存储过程称为游掠化存错过程(cursory procedure), FOREACH
23、语句的语法 例: CREATE PROCEDURE foreach-exO DEFINE i 订 INTi FOR EACH select cl into i from tab order by 1 insert into iab2 values(i j END FOREACH* FOR EACH curl FOR select c2*c3 into uj from tab IF j 100 THEN delete from :ab where current of curl * END IF update tab set c2=c2H- 10 where current of curb EN
24、D FOR EACH f FOREACH EXECUTE PROCEDURE harClO.15) INTO i insert into tab2 vaJueaCi) j END FOREACHf END PROCEDURE j -返回值类型 1,类型2, CREATE PROCEDURE程名 (参数 1,参数 2, RETURNING 21 DEFINE 变量 1 DEFINE 变量 2 类型1; 类型2; 1,表字段2, SELECT表字段 INTO 变量1,变量2, FROM 表名 WHERE条件;-与参数有关 RETURNS; 1,变量 2, END P ROCEDURE; 数据传递
25、向存储过程传递数据 CREATE PROCEDURE存储IS程名一C 一- END PHOCEOURE 存错过程定文语法 CALL存盤!过程名一( CALL语句的语法 由存储过程返回数据 菲娃豔诃掛出岀 1宙陆丄CKTl當回y田韓程回0 KE丄仃葩 S旦W鹽 HEBJRN 表达式 I WITH HESUMF RETURN谱句中的关镖字WITH RESUME表示下伙调用该存储过程时,从RE- TURN语句后面的一条语句开始执行。这样的语句用在返回多行数据的过程中,即游标ft 过程.游标化过程只能在FOKEACH循环中被调用. 第一次调用过程返 冋在lnam列上等于lastname的第一名职,员的
26、姓名及地址,以后每次调用都从 LET Icount = koutit +1 开始执行即返回下一名职员的姓名和地址直至找不到满足条件的职员。以后再调用, 则从 FOR i IN U TO n 语句开始执行.依次返回4组数据a CREATE PROCEDURE read many (last name CHAK,CHAR(J5)j DEFINE p-Zm打p fnanitip-city CHAR(15)j DEFINE p-flddCHAR(20)p DEFINE tcoutiT I NT t DEFINE iINT J LET Icomi 0; KOREACH aclect fnametlnam
27、eciiy intotp-lname p-afld *p-city from cusiomer where In last name RETURN p-baEetP-lnametp-add,p-city WITH RESUME* LET kouni = koum+X END FOREACHf FOR f IN Cl TO 4) RETURN 1,/卽 /4 WITH RESUME J END FOR ? END PROCEDURE* 事务处理 应付发生在数据修改过程中所发生的任何类型的错误的最好办法是使用事务日 志。当发生任何错误时,你能够告诉数据库服务器回滚到原来的状态。下面是前一个例 子使用事务的情况: $ begi n work; $ delete from items
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿用照明与安全标识设备考核试卷
- 毛巾类制品的库存控制与仓储管理考核试卷
- 劳务派遣服务的客户关系优化策略制定与执行评估考核试卷
- 石膏在轻质隔墙板制造中的应用考核试卷
- 生态环境监测在环境教育中的重要性考核试卷
- 电视机修理操作流程考核试卷
- 碱金属与水的反应研究考核试卷
- 纺织机械的智能工厂运营管理策略优化考核试卷
- 天津医科大学临床医学院《舞蹈与健康》2023-2024学年第二学期期末试卷
- 吉林水利电力职业学院《清代宫廷文化史》2023-2024学年第二学期期末试卷
- 食堂负面清单管理制度
- 2025年中国共青团入团团员必知知识考试题与答案
- 2024年郑州铁路职业技术学院单招职业倾向性测试题库必考题
- 2025年山东省济南市平阴县中考一模英语试题(原卷版+解析版)
- 2025年安徽省示范高中皖北协作区第27届联考 生物学(含解析)
- 移动业务代办协议书
- 2025年CSCO胃癌诊疗指南解读
- 2025年度专业技术人员继续教育公需科目考试题(附答案)
- 2025届广东省高三一模生物学试卷(原卷版+解析版)
- 述职报告:岗位认知
- 部编版语文三年级下册第六单元集体备课
评论
0/150
提交评论