《数据厍设计与开发》讲义 3.1.2游标 定义一个游标,使之对应一个 select语句 DECLARE游标名[ SCROLL] CURSOR FOR Select语句[ for update[o列表名]] 的 plate任选项,表示该游标可用于对当前行 改与删除 ·打开一个游标,执行游标对应的查询,结果集 合为该游标的活动集 OPEN游标名 在游标被声明之后,它仍然不是活动状态,在程序开始检 索信息之前执行SQL的OPEN语句打开这个游标,游标 被打开之后,可使用取( fetch)操作从游标中每次检索 行,程序完成检索后,应关闭游标 家邮电大学物你学院 部明80080
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 3.1.2 游标 • 定义一个游标,使之对应一个select语句 DECLARE 游标名 [SCROLL] CURSOR FOR select语句 [for update [of列表名]] for update任选项,表示该游标可用于对当前行 的修改与删除。 • 打开一个游标,执行游标对应的查询,结果集 合为该游标的活动集。 OPEN 游标名 在游标被声明之后,它仍然不是活动状态,在程序开始检 索信息之前,执行SQL的OPEN语句打开这个游标,游标 被打开之后,可使用取(fetch)操作从游标中每次检索 一行,程序完成检索后,应关闭游标.
《数据厍设计与开发》讲义 3.1.2游标 在活动集中将游标移到特定的行,并取出该行 数据放到相应的宿主变量中 FETCH INEXT I PRIOR FIRST I LAST I CURRENT RELETIVE n ABSOLUTE n 游标名ITO[宿主变量表] 关闭游标,释放活动集及其所占资源。需要再 使用该游标时,执行open语句。 CLOSE游标名 删除游标,以后便不能再对该游标执行open语 FREE游标名 家邮电大学物你学院 部明80080
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 3.1.2 游标 • 在活动集中将游标移到特定的行,并取出该行 数据放到相应的宿主变量中。 FETCH [NEXT | PRIOR | FIRST | LAST | CURRENT | RELETIVE n | ABSOLUTE n] 游标名 INTO [宿主变量表] • 关闭游标,释放活动集及其所占资源。需要再 使用该游标时,执行open语句。 CLOSE 游标名 • 删除游标,以后便不能再对该游标执行open语 句了. FREE 游标名
《数据厍设计与开发》讲义 3.1.2游标 exec sql connect user name #define ture 1 identified by: user pwd;/*连接*/ #include <stdio h while((prompt(cid prompt, 1, cust id, 4))>=0) #include"prompt. h exec sql open agent dollars exec sql include sqlca;/*声明通讯区*/ while(ture)& int main() exec sql fetch agent dillars into agent id; dollar_sum;/*游标取值* char cid prompt[=“请输入顾客号:”; printf( %s %11.2fn exec sql begin declare section agent id, dollar sum); char cust id [5]), agent id[4]; double dollar sum continue char user name [20],user_ ped[20] finish: exec sql close agent dollars, exec sql end declare section/声明变量* exec sql commit work;/游标关闭*/ exec sql declare agent dollars cursor for|}/输入顾客D的代理商和金额 select aid, sum( dollars) from orders exec sql commit release;/*正常释放连接* where cid= cust id group by aid; /游标*| return0 exec sql whenever sqlerror goto report_error; report_error: exec sql whenever not found goto finish print dberror(;/出错信息* /*出错处理* exec sql rollback release;/*释放连接* strcpyuser name, mytest") return 1 strcpy(user pwd, test) 北京邮电次学软优学 部明80080
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 #define ture 1 3.1.2 游标 #include <stdio.h> #include “prompt.h” exec sql include sqlca; /*声明通讯区*/ int main( ) { char cid_prompt[]=“请输入顾客号:”; exec sql begin declare section; char cust_id[5],agent_id[4]; double dollar_sum; char user_name[20],user_ped[20]; exec sql end declare section; /*声明变量*/ exec sql declare agent_dollars cursor for select aid,sum(dollars) from orders where cid=:cust_id group by aid;/*游标*/ exec sql whenever sqlerror goto report_error; exec sql whenever not found goto finish; /*出错处理*/ strcpy(user_name,”mytest”); strcpy(user_pwd,”test”); exec sql connect :user_name identified by :user_pwd; /*连接*/ while((prompt(cid_prompt,1,cust_id,4))>=0){ exec sql open agent_dollars; while (ture) { exec sql fetch agent_dillars into :agent_id,:dollar_sum; /*游标取值*/ printf(“ %s %11.2f\n”, agent_id,dollar_sum); } continue; finish: exec sql close agent_dollars; exec sql commit work; /*游标关闭*/ } /*输入顾客ID的代理商和金额*/ exec sql commit release; /*正常释放连接*/ return 0; report_error: print_dberror(); /*出错信息*/ exec sql rollback release; /*释放连接*/ return 1; }
《数据厍设计与开发》讲义 3.1.3通讯区 SQL语句执行信息反馈 良好的应用程序必须提供对错误的处理,应用 程序需要知道SQL语句是否正确执行了,发 生错误时的错误代码,执行时遇到特殊情况 时的警告信息。 SQL通讯区 SQLCA是一个已被声明过的内存 结构每一嵌入SQL语句的执行情况在其执行 完成后写入 USERCA结构中的各变量中,根 据 SQLCA中的内容可以获得每一嵌入SQL语 句执行后的信息,应用程序就可以做相应的处 理。 为了说明( USERCA,必须在应用程序中包括 电大QL0QLCA;
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 3.1.3 通讯区 • SQL语句执行信息反馈 – 良好的应用程序必须提供对错误的处理,应用 程序需要知道SQL语句是否正确执行了,发 生错误时的错误代码,执行时遇到特殊情况 时的警告信息。 – SQL通讯区SQLCA是一个已被声明过的内存 结构,每一嵌入SQL语句的执行情况在其执行 完成后写入USERCA结构中的各变量中, 根 据SQLCA中的内容可以获得每一嵌入SQL语 句执行后的信息,应用程序就可以做相应的处 理。 – 为了说明 (USERCA),必须在应用程序中包括: EXEC SQL INCLUDE SQLCA;
《数据厍设计与开发》讲义 3.1.3通讯区 · SQLCODE: SQLCODE是 SQLCA的结构一个 成员。它是一个每次执行完SQL语句都被更新 的整型变量。 如果执行成功, SQLCODE为0; 如果语句没有产生错误,但遇到了没有数据, SQLCODE为100 除去成功返回0或没有数据返回100的情况,其他 都是某种错误并返回一个负数。 ·SQL-99和Ⅹ/ Open SQL等标准提倡用 SQLSTATE取代 SQLCODE检测SQL的执行情 况,并将 SQLSTATE设置为标准,但在产品中 还不一定支持。例如 ORACle中,预处理程序运 行时必须设置MODE=ANSⅠ才能支持 SsSS EAEa 部明80080
北京邮电大学软件学院 郭文明 2003.06 《数据库设计与开发》讲义 3.1.3 通讯区 • SQLCODE:SQLCODE是SQLCA的结构一个 成员。它是一个每次执行完SQL语句都被更新 的整型变量。 – 如果执行成功,SQLCODE为0; – 如果语句没有产生错误,但遇到了没有数据, SQLCODE为100; – 除去成功返回0或没有数据返回100的情况,其他 都是某种错误并返回一个负数。 • SQL-99和X/OpenSQL等标准提倡用 SQLSTATE取代SQLCODE检测SQL的执行情 况,并将SQLSTATE设置为标准,但在产品中 还不一定支持。例如ORACLE中,预处理程序运 行时必须设置MODE=ANSI才能支持 SQLSTATE