《数据库编程》PPT课件.ppt

上传人:hs****ma 文档编号:568614898 上传时间:2024-07-25 格式:PPT 页数:52 大小:366.51KB
返回 下载 相关 举报
《数据库编程》PPT课件.ppt_第1页
第1页 / 共52页
《数据库编程》PPT课件.ppt_第2页
第2页 / 共52页
《数据库编程》PPT课件.ppt_第3页
第3页 / 共52页
《数据库编程》PPT课件.ppt_第4页
第4页 / 共52页
《数据库编程》PPT课件.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《《数据库编程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据库编程》PPT课件.ppt(52页珍藏版)》请在金锄头文库上搜索。

1、第八章第八章 数据库编数据库编程程 嵌入式嵌入式SQL 2n n SQLSQL语言提供了两种不同的使用方式:语言提供了两种不同的使用方式:语言提供了两种不同的使用方式:语言提供了两种不同的使用方式:n n 交互式交互式交互式交互式n n 嵌入式嵌入式嵌入式嵌入式n n 为什么要引入嵌入式为什么要引入嵌入式为什么要引入嵌入式为什么要引入嵌入式SQLSQLn n SQL SQL语言是非过程性语言语言是非过程性语言语言是非过程性语言语言是非过程性语言n n 事务处理应用需要高级语言事务处理应用需要高级语言事务处理应用需要高级语言事务处理应用需要高级语言n n 这两种方式细节上有差别,在程序设计的环境

2、这两种方式细节上有差别,在程序设计的环境这两种方式细节上有差别,在程序设计的环境这两种方式细节上有差别,在程序设计的环境下,下,下,下,SQLSQL语句要做某些必要的扩充语句要做某些必要的扩充语句要做某些必要的扩充语句要做某些必要的扩充嵌入式嵌入式SQLSQL语句语句3将将SQLSQL语言嵌入到某种高级语言中使用,利语言嵌入到某种高级语言中使用,利用高级语言的过程性结构来弥补用高级语言的过程性结构来弥补SQLSQL语言实现语言实现复杂应用方面的不足。复杂应用方面的不足。这种方式下使用的这种方式下使用的SQLSQL语言称为语言称为嵌入式嵌入式SQL(Embedded SQL)SQL(Embedd

3、ed SQL)。嵌入嵌入SQLSQL的高级语言称为的高级语言称为主语言或宿主语言。主语言或宿主语言。 嵌入式嵌入式SQLSQL4 把SQL嵌入到宿主语言中使用必须要解决以下三个方面的问题:嵌入识别问题嵌入识别问题: 宿主语言的编译程序不能识别宿主语言的编译程序不能识别SQL语句,所以首要的语句,所以首要的问题就是要解决如何区分宿主语言的语句和问题就是要解决如何区分宿主语言的语句和SQL语句;语句;宿主语言与宿主语言与SQLSQL语言的数据交互问题语言的数据交互问题: SQL语句的查询结果必须能够交给宿主语言处理,宿语句的查询结果必须能够交给宿主语言处理,宿主语言的数据也要能够交给主语言的数据也

4、要能够交给SQL语句使用;语句使用;宿主语言的单记录与宿主语言的单记录与SQLSQL的多记录的问题的多记录的问题: 宿主语言一般一次处理一条记录,而宿主语言一般一次处理一条记录,而SQL常常处理的是常常处理的是记录(元组)的集合,这个矛盾必须解决。记录(元组)的集合,这个矛盾必须解决。5嵌入式嵌入式SQL的一般形式的一般形式 n n 为了区分为了区分为了区分为了区分SQLSQL语句与主语言语句,需要语句与主语言语句,需要语句与主语言语句,需要语句与主语言语句,需要: : n n 前缀:前缀:前缀:前缀:EXEC SQLEXEC SQLn n 结束标志:随主语言的不同而不同结束标志:随主语言的不

5、同而不同结束标志:随主语言的不同而不同结束标志:随主语言的不同而不同n n 以以以以C C为主语言的嵌入式为主语言的嵌入式为主语言的嵌入式为主语言的嵌入式SQLSQL语句的一般形式语句的一般形式语句的一般形式语句的一般形式 EXEC SQLEXEC SQL SQL ; ;例:例:例:例:EXEC SQL DROP TABLE Student EXEC SQL DROP TABLE Student EXEC SQL DROP TABLE Student EXEC SQL DROP TABLE Student ; ;n n 以以以以COBOLCOBOL作为主语言的嵌入式作为主语言的嵌入式作为主语言

6、的嵌入式作为主语言的嵌入式SQLSQL语句的一般形式语句的一般形式语句的一般形式语句的一般形式 EXEC SQL SQLEXEC SQL END-EXECEND-EXEC例:例:例:例: EXEC SQL DROP TABLE Student END-EXECEXEC SQL DROP TABLE Student END-EXEC6 说明性语句说明性语句说明性语句说明性语句嵌入嵌入嵌入嵌入SQLSQL语句语句语句语句 数据定义数据定义数据定义数据定义 可执行语句可执行语句可执行语句可执行语句 数据控制数据控制数据控制数据控制 数据操纵数据操纵数据操纵数据操纵 允许出现可执行的高级语言语句的地方

7、,都可以写允许出现可执行的高级语言语句的地方,都可以写允许出现可执行的高级语言语句的地方,都可以写允许出现可执行的高级语言语句的地方,都可以写可执行可执行可执行可执行SQLSQL语句语句语句语句 允许出现说明语句的地方,都可以写说明性允许出现说明语句的地方,都可以写说明性允许出现说明语句的地方,都可以写说明性允许出现说明语句的地方,都可以写说明性SQLSQL语语语语句句句句7嵌入式嵌入式SQL语句与主语言之间的通信语句与主语言之间的通信1. SQL1. SQL通信区通信区通信区通信区向主语言传递向主语言传递向主语言传递向主语言传递SQLSQL语句的执行状态信息语句的执行状态信息语句的执行状态信

8、息语句的执行状态信息主语言能够据此控制程序流程主语言能够据此控制程序流程主语言能够据此控制程序流程主语言能够据此控制程序流程2. 2. 主变量主变量主变量主变量 1 1)主语言向)主语言向)主语言向)主语言向SQLSQL语句提供参数语句提供参数语句提供参数语句提供参数 2 2)将)将)将)将SQLSQL语句查询数据库的结果交主语言进一步语句查询数据库的结果交主语言进一步语句查询数据库的结果交主语言进一步语句查询数据库的结果交主语言进一步处理处理处理处理3. 3. 游标游标游标游标解决集合性操作语言与过程性操作语言的不匹配解决集合性操作语言与过程性操作语言的不匹配解决集合性操作语言与过程性操作语

9、言的不匹配解决集合性操作语言与过程性操作语言的不匹配81. SQL 1. SQL 通信区通信区通信区通信区n n SQL SQL SQL SQL 通信区通信区通信区通信区: SQL Communication Area SQL Communication Area SQL Communication Area SQL Communication Area ,简称,简称,简称,简称SQLCASQLCASQLCASQLCAn n SQLCASQLCA的用途的用途的用途的用途n n SQLSQL语句执行后,语句执行后,语句执行后,语句执行后,DBMSDBMS反馈给应用程序信息反馈给应用程序信息反馈给

10、应用程序信息反馈给应用程序信息n n 描述系统当前工作状态描述系统当前工作状态描述系统当前工作状态描述系统当前工作状态n n 描述运行环境描述运行环境描述运行环境描述运行环境n n 这些信息将送到这些信息将送到这些信息将送到这些信息将送到SQLSQL通信区通信区通信区通信区SQLCASQLCA中中中中n n 应用程序从应用程序从应用程序从应用程序从SQLCASQLCA中取出这些状态信息,据此决定中取出这些状态信息,据此决定中取出这些状态信息,据此决定中取出这些状态信息,据此决定接下来执行的语句接下来执行的语句接下来执行的语句接下来执行的语句DBMSDBMS工作状态、运行信息工作状态、运行信息S

11、QLCASQLCA应用程序应用程序后继语句后继语句9n n SQLCASQLCA的内容的内容的内容的内容n n 与所执行的与所执行的与所执行的与所执行的SQLSQL语句有关语句有关语句有关语句有关n n 与该与该与该与该SQLSQL语句的执行情况有关语句的执行情况有关语句的执行情况有关语句的执行情况有关例:例:例:例:在执行删除语句在执行删除语句在执行删除语句在执行删除语句DELETEDELETE后,不同的执行情况,后,不同的执行情况,后,不同的执行情况,后,不同的执行情况,SQLCASQLCA中有不同的信息:中有不同的信息:中有不同的信息:中有不同的信息:n n 违反数据保护规则,操作拒绝违

12、反数据保护规则,操作拒绝违反数据保护规则,操作拒绝违反数据保护规则,操作拒绝n n 没有满足条件的行,一行也没有删除没有满足条件的行,一行也没有删除没有满足条件的行,一行也没有删除没有满足条件的行,一行也没有删除n n 成功删除,并有删除的行数成功删除,并有删除的行数成功删除,并有删除的行数成功删除,并有删除的行数n n 无条件删除警告信息无条件删除警告信息无条件删除警告信息无条件删除警告信息n n 由于各种原因,执行出错由于各种原因,执行出错由于各种原因,执行出错由于各种原因,执行出错10SQLCASQLCA在应用程序中用在应用程序中用EXEC SQL INCLUDE SQLCAEXEC S

13、QL INCLUDE SQLCA 加以定义加以定义 SQLCODESQLCODE: SQLCA SQLCA中的一个存放返回代码的变量;中的一个存放返回代码的变量; 用来存放每次用来存放每次SQLSQL语句执行后返回的代码语句执行后返回的代码(一个值),表示该(一个值),表示该SQLSQL语句执行是否成功,语句执行是否成功,以及不成功的原因。以及不成功的原因。 通常用预定义的常量通常用预定义的常量SUCCESSSUCCESS表示成功;否表示成功;否则则在在SQLCODESQLCODE中将存放错误代码。中将存放错误代码。 112. 2. 主变量主变量n 什么是主变量什么是主变量什么是主变量什么是主

14、变量嵌入式嵌入式嵌入式嵌入式SQLSQL语句中可以使用主语言的程序变语句中可以使用主语言的程序变语句中可以使用主语言的程序变语句中可以使用主语言的程序变量来输入或输出数据量来输入或输出数据量来输入或输出数据量来输入或输出数据在在在在SQLSQL语句中使用的语句中使用的语句中使用的语句中使用的主语言程序变量主语言程序变量主语言程序变量主语言程序变量简称为简称为简称为简称为主变量主变量主变量主变量(Host VariableHost Variable)n n主变量的类型主变量的类型主变量的类型主变量的类型n n输入主变量输入主变量输入主变量输入主变量n n由应用程序对其赋值,由应用程序对其赋值,由

15、应用程序对其赋值,由应用程序对其赋值,SQLSQL语句引用语句引用语句引用语句引用n n输出主变量输出主变量输出主变量输出主变量n n由由由由SQLSQL语句赋值或设置状态信息,返回给应用程序语句赋值或设置状态信息,返回给应用程序语句赋值或设置状态信息,返回给应用程序语句赋值或设置状态信息,返回给应用程序n n一个主变量有可能既是输入主变量又是输出主变量一个主变量有可能既是输入主变量又是输出主变量一个主变量有可能既是输入主变量又是输出主变量一个主变量有可能既是输入主变量又是输出主变量12n n主变量的用途主变量的用途主变量的用途主变量的用途 用于用于用于用于SQLSQL与宿主语言交换数据;与宿

16、主语言交换数据;与宿主语言交换数据;与宿主语言交换数据;n n输入主变量输入主变量输入主变量输入主变量n n 指定向数据库中插入的数据指定向数据库中插入的数据指定向数据库中插入的数据指定向数据库中插入的数据n n 将数据库中的数据修改为指定值将数据库中的数据修改为指定值将数据库中的数据修改为指定值将数据库中的数据修改为指定值n n 指定执行的操作指定执行的操作指定执行的操作指定执行的操作n n 指定指定指定指定WHEREWHERE子句或子句或子句或子句或HAVINGHAVING子句中的条件子句中的条件子句中的条件子句中的条件n n输出主变量输出主变量输出主变量输出主变量n n 获取获取获取获取

17、SQLSQL语句的结果数据语句的结果数据语句的结果数据语句的结果数据n n 获取获取获取获取SQLSQL语句的执行状态语句的执行状态语句的执行状态语句的执行状态13n n指示变量指示变量指示变量指示变量n n一个主变量可以附带一个指示变量(一个主变量可以附带一个指示变量(一个主变量可以附带一个指示变量(一个主变量可以附带一个指示变量(Indicator Indicator VariableVariable)n n什么是指示变量什么是指示变量什么是指示变量什么是指示变量n n整型变量整型变量整型变量整型变量n n用来用来用来用来“ “指示指示指示指示” ”所指主变量的值或条件所指主变量的值或条件

18、所指主变量的值或条件所指主变量的值或条件n n指示变量的用途指示变量的用途指示变量的用途指示变量的用途n n输入主变量可以利用指示变量赋空值输入主变量可以利用指示变量赋空值输入主变量可以利用指示变量赋空值输入主变量可以利用指示变量赋空值n n输出主变量可以利用指示变量检测出是否空值,值输出主变量可以利用指示变量检测出是否空值,值输出主变量可以利用指示变量检测出是否空值,值输出主变量可以利用指示变量检测出是否空值,值是否被截断是否被截断是否被截断是否被截断14定义主变量:定义主变量:EXEC SQL BEGIN DECLARE SECTIONEXEC SQL BEGIN DECLARE SECT

19、ION. . (说明主变量和指示变量说明主变量和指示变量)EXEC SQL END DECLARE SECTIONEXEC SQL END DECLARE SECTIONn n这两条语句必须配对出现,相当于一个括号,两条语句这两条语句必须配对出现,相当于一个括号,两条语句这两条语句必须配对出现,相当于一个括号,两条语句这两条语句必须配对出现,相当于一个括号,两条语句中间是主变量的说明中间是主变量的说明中间是主变量的说明中间是主变量的说明引用主变量:引用主变量:主主变变量量可可以以在在SQLSQL语语句句中中任任何何一一个个能能够够使使用用表表达达式的地方出现。式的地方出现。在在SQLSQL语语

20、句句中中引引用用主主变变量量和和指指示示变变量量时时,其其变变量量名前应加以某种特殊符号。名前应加以某种特殊符号。15主变量说明的例:EXEC SQL BEGIN DECLARE SECTION ;char whnumb5char city12int wh_areaEXEC SQL END DECLARE SECTION;使用主变量的例子:UPDATE 仓库仓库SET 面积面积 = :wh_areaWHERE 仓库号仓库号 = :whnumb ;163. 3. 游游 标标(cursorcursor)n n为什么要使用游标为什么要使用游标为什么要使用游标为什么要使用游标n n SQLSQL语言与

21、主语言具有不同数据处理方式语言与主语言具有不同数据处理方式语言与主语言具有不同数据处理方式语言与主语言具有不同数据处理方式n nSQLSQL语言是面向集合的,一条语言是面向集合的,一条语言是面向集合的,一条语言是面向集合的,一条SQLSQL语句原则上语句原则上语句原则上语句原则上可以产生或处理多条记录可以产生或处理多条记录可以产生或处理多条记录可以产生或处理多条记录n n主语言是面向记录的,一组主变量一次只能存主语言是面向记录的,一组主变量一次只能存主语言是面向记录的,一组主变量一次只能存主语言是面向记录的,一组主变量一次只能存放一条记录放一条记录放一条记录放一条记录17n n 什么是游标什么

22、是游标n n游标是系统为用户开设的一个数据缓冲区,存游标是系统为用户开设的一个数据缓冲区,存游标是系统为用户开设的一个数据缓冲区,存游标是系统为用户开设的一个数据缓冲区,存放放放放SQLSQL语句的执行结果语句的执行结果语句的执行结果语句的执行结果n n每个游标区都有一个名字每个游标区都有一个名字每个游标区都有一个名字每个游标区都有一个名字n n用户可以用用户可以用用户可以用用户可以用SQLSQL语句逐一从游标中获取记录,语句逐一从游标中获取记录,语句逐一从游标中获取记录,语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理并赋给主变量,交由主语言进一步处理并赋给主变量,交由主语言进一

23、步处理并赋给主变量,交由主语言进一步处理18实实 例例例:带有嵌入式例:带有嵌入式例:带有嵌入式例:带有嵌入式SQLSQL的一小段的一小段的一小段的一小段C C程序程序程序程序 .EXEC SQL INCLUDE SQLCA; EXEC SQL INCLUDE SQLCA; /* (1) /* (1) 定义定义定义定义SQLSQL通信区通信区通信区通信区 * */ /EXEC SQL BEGIN DECLARE SECTION; EXEC SQL BEGIN DECLARE SECTION; /* (2) /* (2) 说明主变量说明主变量说明主变量说明主变量 * */ / CHAR titl

24、e_id(7); CHAR title_id(7); CHAR title(81); CHAR title(81); INT royalty; INT royalty;EXEC SQL END DECLARE SECTION;EXEC SQL END DECLARE SECTION;19main()main() EXEC SQL DECLARE C1 CURSOR FOR EXEC SQL DECLARE C1 CURSOR FOR SELECT tit_id, tit, SELECT tit_id, tit, royroy FROM titles; FROM titles; /* (3) /

25、* (3) 游标操作(定义游标)游标操作(定义游标)游标操作(定义游标)游标操作(定义游标)* */ / /* /* 从从从从titlestitles表中查询表中查询表中查询表中查询 tit_id, tit, tit_id, tit, royroy */ */ EXEC SQL OPEN C1; EXEC SQL OPEN C1; /* (4) /* (4) 游标操作(打开游标)游标操作(打开游标)游标操作(打开游标)游标操作(打开游标)* */ /20 for(;)for(;) EXEC SQL FETCH C1 INTO :title_id, :title, :royalty; EXEC

26、SQL FETCH C1 INTO :title_id, :title, :royalty; /* (5) /* (5) 游标操作(将当前数据放入主变量并推进游标指针)游标操作(将当前数据放入主变量并推进游标指针)游标操作(将当前数据放入主变量并推进游标指针)游标操作(将当前数据放入主变量并推进游标指针)* */ / if (if (sqlca.sqlcodesqlca.sqlcode SUCCESS) SUCCESS) /* (6) /* (6) 利用利用利用利用SQLCASQLCA中的状态信息决定何时退出循环中的状态信息决定何时退出循环中的状态信息决定何时退出循环中的状态信息决定何时退出循

27、环 * */ / break; break; printf(Titleprintf(Title ID: %s, Royalty: %d, :title_id, :royalty); ID: %s, Royalty: %d, :title_id, :royalty); printf(Titleprintf(Title: %s, :title);: %s, :title); /* /* 打印查询结果打印查询结果打印查询结果打印查询结果 * */ / EXEC SQL CLOSE C1; EXEC SQL CLOSE C1; /* (7) /* (7) 游标操作(关闭游标)游标操作(关闭游标)游标操

28、作(关闭游标)游标操作(关闭游标)* */ / 21不使用游标的不使用游标的SQLSQL语句语句n n不用游标的不用游标的SQL语句的种类语句的种类n n 说明性语句说明性语句说明性语句说明性语句n n 数据定义语句数据定义语句数据定义语句数据定义语句n n 数据控制语句数据控制语句数据控制语句数据控制语句n n 查询结果为单记录的查询结果为单记录的查询结果为单记录的查询结果为单记录的SELECTSELECT语句语句语句语句n n 非非非非CURRENTCURRENT形式的增删改语句形式的增删改语句形式的增删改语句形式的增删改语句22 说明性语句是专为在嵌入式说明性语句是专为在嵌入式说明性语句

29、是专为在嵌入式说明性语句是专为在嵌入式SQLSQL中说明主变量、中说明主变量、中说明主变量、中说明主变量、SQLCASQLCA等而设置的。等而设置的。等而设置的。等而设置的。n n 说明主变量说明主变量说明主变量说明主变量 1. EXEC SQL BEGIN DECLARE SECTION; 1. EXEC SQL BEGIN DECLARE SECTION; 2. EXEC SQL END DECLARE SECTION; 2. EXEC SQL END DECLARE SECTION;n n 说明说明说明说明SQLCASQLCA 3. EXEC SQL INCLUDE SQLCA3. EX

30、EC SQL INCLUDE SQLCA1 1、说明性语句、说明性语句232 2、数据定义语句、数据定义语句例例1 建立一个建立一个“学生学生”表表Student EXEC SQL CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15);n n 数据定义语句中不允许使用主变量数据定义语句中不允许使用主变量数据定义语句中不允许使用主变量数据定义语句中不允许使用主变量例:下列语句是错误的例:下列语句是错误的例:下列语句是错误的例:下列语句是错误

31、的 EXEC SQL DROPEXEC SQL DROP TABLE :table_name; TABLE :table_name;243 3、数据控制语句、数据控制语句例例2 把查询把查询Student表权限授给用户表权限授给用户U1 EXEC SQL GRANT SELECT ON TABLE Student TO U1;254. 4. 查询结果为单记录的查询结果为单记录的SELECTSELECT语句语句n 语句格式语句格式EXEC SQL SELECT ALL|DISTINCT ,. INTO ,. FROM , . WHERE GROUP BY HAVING ORDER BY ASC|

32、DESC;26例例3 根据学生号码查询学生信息根据学生号码查询学生信息。n Hsno, Hname, Hsex, Hage, Hdept和和givensno均是主变均是主变量,并均已在前面的程序中说明过了。量,并均已在前面的程序中说明过了。n假设已将要查询的学生的学号赋给了主变量假设已将要查询的学生的学号赋给了主变量givensno EXEC SQL SELECT Sno, Sname, Ssex, Sage, Sdept INTO :Hsno, :Hname, :Hsex, :Hage, :Hdept FROM Student WHERE Sno=:givensno;27例例4 查询某个学生

33、选修某门课程的成绩。查询某个学生选修某门课程的成绩。 假设已将要查询的学生的学号赋给了主变量假设已将要查询的学生的学号赋给了主变量givensno,将课程号赋给了主变量将课程号赋给了主变量givencno。 EXEC SQL SELECT Sno, Cno, Grade INTO :Hsno, :Hcno, :Hgrade FROM SC WHERE Sno=:givensno AND Cno=:givencno;285 5、非、非CURRENTCURRENT形式的增删改语句形式的增删改语句 有些增删改语句不需要使用游标,有些增删改语句不需要使用游标,不是不是CURRENTCURRENT形式。

34、形式。29n使用主变量使用主变量n SET子句、子句、WHERE子句子句n使用指示变量使用指示变量n SET子句子句n非非CURRENT形式的形式的UPDATE语句可以操作多条元组语句可以操作多条元组例例5 将全体学生将全体学生1号课程的考试成绩增加若干分。号课程的考试成绩增加若干分。 假设增加的分数已赋给主变量假设增加的分数已赋给主变量Raise EXEC SQL UPDATE SC SET Grade=Grade+:Raise WHERE Cno=1;1 1)非)非CURRENTCURRENT形式的形式的UPDATEUPDATE语句语句302 2)非)非CURRENTCURRENT形式的形

35、式的DELETEDELETE语句语句n非非CURRENT形式的形式的DELETE语句语句n使用主变量使用主变量n WHERE子句子句n非非CURRENT形式的形式的DELETE语句可以操作多条元组语句可以操作多条元组例例8 某个学生退学了,现要将有关他的所有选课记录删除掉。某个学生退学了,现要将有关他的所有选课记录删除掉。 假设该学生的姓名已赋给主变量假设该学生的姓名已赋给主变量stdname EXEC SQL DELETE FROM SC WHERE Sno= (SELECT Sno FROM Student WHERE Sname=:stdname);313 3)INSERTINSERT语

36、句语句n非CURRENT形式的INSERT语句n使用主变量n VALUES子句n使用指示变量n VALUES子句n非CURRENT形式的INSERT语句一次只能输入一条元组32例例9 某个学生新选修了某门课程,将有关记录插入某个学生新选修了某门课程,将有关记录插入SC表表假设学生的学号已赋给主变量假设学生的学号已赋给主变量stdno,课程号已赋给主变量课程号已赋给主变量couno gradeid=-1; EXEC SQL INSERT INTO SC(Sno, Cno, Grade) VALUES(:stdno, :couno, :gr:gradeid);n由于该学生刚选修课程,尚未考试,因此

37、成绩列为空。所由于该学生刚选修课程,尚未考试,因此成绩列为空。所以本例中用指示变量指示相应的主变量为空值。以本例中用指示变量指示相应的主变量为空值。33使用游标的使用游标的SQLSQL语句语句n 必须使用游标的必须使用游标的SQL语句语句n 查询结果为多条记录的查询结果为多条记录的SELECT语句语句n CURRENT形式的形式的UPDATE语句语句n CURRENT形式的形式的DELETE语句语句34n 当查询结果是多条记录时,需要使用游标机当查询结果是多条记录时,需要使用游标机制。制。n使用游标的步骤使用游标的步骤 1) 1) 说明游标说明游标 2) 2) 打开游标打开游标 3) 3) 移

38、动游标指针,然后取当前记录移动游标指针,然后取当前记录 4 4)关闭游标)关闭游标 5 5) 释放游标释放游标1 1、 查询结果为多条记录的查询结果为多条记录的SELECTSELECT语句语句351 1) 说明游标说明游标n 使用使用DECLARE语句语句n 语句格式语句格式EXEC SQL DECLARE CURSOR FOR ;n 功能功能n是一条说明性语句,这时是一条说明性语句,这时DBMS并不执行并不执行SELECT指定的查询操作。指定的查询操作。362 2) 打开游标打开游标n 使用使用OPEN语句语句n 语句格式语句格式 EXEC SQL OPEN ;n 功能功能n 打开游标实际上

39、是执行相应的打开游标实际上是执行相应的SELECT语句,把所有满足查语句,把所有满足查询条件的记录从指定表取到缓冲区中询条件的记录从指定表取到缓冲区中n 这时游标处于活动状态,指针指向查询结果集中第一条记录这时游标处于活动状态,指针指向查询结果集中第一条记录之前之前373 3) 移动游标指针,然后取当前记录移动游标指针,然后取当前记录 n 使用使用FETCH语句语句n 语句格式语句格式 EXEC SQL FETCH NEXT|PRIOR| FIRST|LAST FROM INTO ,.;38n 功能功能n 指定方向推动游标指针,然后将缓冲区中的当前记录取指定方向推动游标指针,然后将缓冲区中的当

40、前记录取出来送至主变量供主语言进一步处理。出来送至主变量供主语言进一步处理。n NEXT|PRIOR|FIRST|LAST:指定推动游标指针的指定推动游标指针的方式。方式。n NEXT:向前推进一条记录向前推进一条记录n PRIOR:向回退一条记录向回退一条记录n FIRST:推向第一条记录推向第一条记录n LAST:推向最后一条记录推向最后一条记录n 缺省值为缺省值为NEXT39n n说明说明说明说明(1) (1) 主变量必须与主变量必须与主变量必须与主变量必须与SELECTSELECT语句中的目标列表达式具有一语句中的目标列表达式具有一语句中的目标列表达式具有一语句中的目标列表达式具有一一

41、对应关系一对应关系一对应关系一对应关系(2) FETCH(2) FETCH语句通常用在一个循环结构中,通过循环执行语句通常用在一个循环结构中,通过循环执行语句通常用在一个循环结构中,通过循环执行语句通常用在一个循环结构中,通过循环执行FETCHFETCH语句逐条取出结果集中的行进行处理语句逐条取出结果集中的行进行处理语句逐条取出结果集中的行进行处理语句逐条取出结果集中的行进行处理(3) (3) 为进一步方便用户处理数据,现在一些关系数据库管为进一步方便用户处理数据,现在一些关系数据库管为进一步方便用户处理数据,现在一些关系数据库管为进一步方便用户处理数据,现在一些关系数据库管理系统对理系统对理

42、系统对理系统对FETCHFETCH语句做了扩充,允许用户向任意方向以任语句做了扩充,允许用户向任意方向以任语句做了扩充,允许用户向任意方向以任语句做了扩充,允许用户向任意方向以任意步长移动游标指针意步长移动游标指针意步长移动游标指针意步长移动游标指针404 4)关闭游标)关闭游标 n 使用使用CLOSE语句语句n 语句格式语句格式 EXEC SQL CLOSE ;n 功能功能n 关闭游标,释放结果集占用的缓冲区及其他资源关闭游标,释放结果集占用的缓冲区及其他资源n 说明说明n 游标被关闭后,就不再和原来的查询结果集相联系游标被关闭后,就不再和原来的查询结果集相联系n 被关闭的游标可以再次被打开

43、,与新的查询结果相联系被关闭的游标可以再次被打开,与新的查询结果相联系415)释放游标 释放游标释放游标 DEALLOCATE 该命令的功能是删除由该命令的功能是删除由DECLARE说明的游标。说明的游标。该命令不同于该命令不同于CLOSE命令,命令,CLOSE命令只是命令只是关闭游标,需要时还可以重新打开;而关闭游标,需要时还可以重新打开;而DEALLOCATE命令则要释放和删除与游标有命令则要释放和删除与游标有关的所有数据结构和定义。关的所有数据结构和定义。 42例例1 查询某个系全体学生的信息(学号、姓名、性别和查询某个系全体学生的信息(学号、姓名、性别和年龄)。要查询的系名由用户在程序

44、运行过程中指定,年龄)。要查询的系名由用户在程序运行过程中指定,放在主变量放在主变量deptname中中. EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; . /* 说明主变量说明主变量 deptname,HSno,HSname,HSsex,HSage等等*/ . . EXEC SQL END DECLARE SECTION; . . gets(deptname); /* 为主变量为主变量deptname赋值赋值 */ .43 EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ss

45、ex, Sage FROM Student WHERE SDept=:deptname; /* 说明游标说明游标 */ EXEC SQL OPEN SX /* 打开游标打开游标 */ WHILE(1) /* 用循环结构逐条处理结果集中的记录用循环结构逐条处理结果集中的记录 */ EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; /* 将游标指针向前推进一行,然后从结将游标指针向前推进一行,然后从结 果集中取当前行,送相应主变量果集中取当前行,送相应主变量*/44if (sqlca.sqlcode SUCCESS) break; /*

46、若所有查询结果均已处理完或出现若所有查询结果均已处理完或出现 SQL语句错误,则退出循环语句错误,则退出循环 */ /* 由主语言语句进行进一步处理由主语言语句进行进一步处理 */ printf(.). . ; EXEC SQL CLOSE SX; /* 关闭游标关闭游标 */ . .452. CURRENT 形式的UPDATE和DELETE语句 CURSOR不仅仅可以用来浏览查询不仅仅可以用来浏览查询结果,还可以用结果,还可以用UPDATE语句修改语句修改CURSOR对应的当前行或用对应的当前行或用DELETE命命令删除对应的当前行。令删除对应的当前行。 46使用游标的使用游标的UPDATE

47、命令命令UPDATE SET =|NULL,=|NULLWHERE CURRENT OF 使用游标的使用游标的DELETE命令命令DELETE FROM WHERE CURRENT OF 47动态动态SQLSQL简介简介n 用户可以在程序运行过程中根据实际需要输入用户可以在程序运行过程中根据实际需要输入WHERE子句或子句或HAVING子句中某些变量的子句中某些变量的值值。n 语句中主变量的语句中主变量的个数与数据类型个数与数据类型在预编译时都在预编译时都是确定的,只有是主变量的是确定的,只有是主变量的值值是程序运行过程中是程序运行过程中动态输入的。动态输入的。静态静态SQLSQL481. 什

48、么是动态嵌入式什么是动态嵌入式SQLn动态动态SQL方法允许在程序运行过程中临时方法允许在程序运行过程中临时“组装组装”SQL语句。语句。2. 应用范围应用范围n在在预编译预编译时下列信息不能确定时时下列信息不能确定时n SQL语句正文语句正文n 主变量个数主变量个数n 主变量的数据类型主变量的数据类型n SQL语句中引用的数据库对象(列、索引、基本表、视图语句中引用的数据库对象(列、索引、基本表、视图等)等) 动态动态 SQLSQL 493. 动态动态SQL的形式的形式n语句可变语句可变n 临时构造完整的临时构造完整的SQL语句语句n条件可变条件可变n WHERE子句中的条件子句中的条件n

49、HAVING短语中的条件短语中的条件n数据库对象、查询条件均可变数据库对象、查询条件均可变n SELECT子句中的列名子句中的列名n FROM子句中的表名或视图名子句中的表名或视图名n WHERE子句中的条件子句中的条件n HAVING短语中的条件短语中的条件504. 常用动态常用动态SQL语句语句 动态动态SQL预备语句预备语句 EXEC SQL PREPARE动态动态SQL语句名语句名FROM共享变量或字符串共享变量或字符串 动态动态SQL执行语句执行语句 EXEC SQL EXECUTE动态动态SQL语句名语句名n 使用动态使用动态SQL技术更多的是涉及程序设计方技术更多的是涉及程序设计

50、方面的知识,而不是面的知识,而不是SQL语言本身语言本身51例例 下面两个下面两个C语言的程序段说明了动态语言的程序段说明了动态SQL语句的使用技术。语句的使用技术。 EXEC SQL BEGIN DECLARE SECTION; char *query; EXEC SQL END DECLARE SECTION; scanf(%s,query);/* 从键盘输入一个从键盘输入一个SQL语句语句 */ EXEC SQL PREPARE que FROM :query; EXEC SQL EXECUTE que; 这这个个程程序序段段表表示示从从键键盘盘输输入入一一个个SQL语语句句到到字字符符数数组组中中;字符指针字符指针 query指向字符串的第指向字符串的第1个字符。个字符。 如如果果执执行行语语句句只只做做一一次次,那那么么程程序序段段最最后后两两个个语语句句可可合合并并成一个语句:成一个语句:EXEC SQL EXECUTE IMMEDIATE :query;52

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号