数据库中的数据交换.ppt
《数据库中的数据交换.ppt》由会员分享,可在线阅读,更多相关《数据库中的数据交换.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章数据库中的数据交换数据库中的数据交换2 22007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 数据库中的数据交换数据库中的数据交换6.1 概述概述6.2 数据交数据交换换的管理的管理6.3 数据交数据交换换的流程的流程6.4 数据交数据交换换的四种方式的四种方式3 32007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.1 概述概述q何为数据库中的何为数据库中的数据交换数据交换?数据库使用者数据库使用者数据库数据库数据交换数据交换是数据库与其使用者间的数据交互过程是数据库与其使用者间的数据交互过程6.1.1 数据交数据交换换模型模型数据主体数据主体数据
2、客体数据客体SQL语句语句执行结果代码执行结果代码数据值数据值4 42007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.1.2 数据交数据交换换的五种方式的五种方式q初初级阶级阶段段人机人机对话对话方式,交互方式方式,交互方式q中中级阶级阶段段嵌入式方式嵌入式方式自含方式自含方式调调用用层层接口(接口(call level interface)方式)方式q近期近期阶阶段段Web方式方式5 52007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 数据库中的数据交换数据库中的数据交换6.1 概述概述6.2 数据交数据交换换的管理的管理6.3 数据交数据交换换的流程的流
3、程6.4 数据交数据交换换的四种方式的四种方式6 62007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2 数据交数据交换换的管理的管理q数据交数据交换换的管理包括如下内容:的管理包括如下内容:6.2.1 会会话话管理管理6.2.2 连连接管理接管理6.2.3 游游标标管理管理6.2.4 诊诊断管理断管理6.2.5 动态动态SQL7 72007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.1 会会话话管理管理q数据交换是两个数据体之间的会话过程,会话的进数据交换是两个数据体之间的会话过程,会话的进行须预先作环境的设定,这就是会话管理行须预先作环境的设定,这
4、就是会话管理q会话管理的内容包括:会话管理的内容包括:会话的数据客体模式设定(网络环境、目录层、会话的数据客体模式设定(网络环境、目录层、模式层)模式层)会话的语言模式设定(字符集)会话的语言模式设定(字符集)会话的时间模式设定(包括时区)会话的时间模式设定(包括时区)会话的标识符设定(对所建立的会话的标识符设定(对所建立的会话会话进行命进行命名)名)8 82007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.2 连连接管理接管理q连接管理接管理负责在数据主、客体在数据主、客体间建立建立实质性的关性的关联,包括服包括服务器指定、内存区域分配等。也可以断开两器指定、内存区域分
5、配等。也可以断开两者之者之间的关的关联q连接接语句句CONNECT TO ASUSERq断开断开连接接语句句DISCONNECT|ALL|CURRENT9 92007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理q在数据交在数据交换换中,数据中,数据库库SQL中的中的变变量是集合型的而量是集合型的而应应用程序的程序用程序的程序设计语设计语言中的言中的变变量量则则是是标标量型,因量型,因此数据此数据库库中中SQL变变量不能直接供程序量不能直接供程序设计语设计语言使用,言使用,而需要有一种机制将而需要有一种机制将SQL变变量中的集合量逐个取出量中的集合量逐个
6、取出后送入后送入应应用程序用程序变变量内供其使用,而提供此种机制量内供其使用,而提供此种机制方法是增加游方法是增加游标标(cursor)语语句句10102007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理q游游标标(Cursor)操作)操作declare a cursor为为某一映像某一映像语语句(可能返回多个句(可能返回多个结结果元果元组组)的)的结结果集果集合定合定义义一个命名的游一个命名的游标标open the cursor执执行相行相应应的映像的映像语语句并打开句并打开获获得的得的结结果集,此果集,此时时游游标标处处于活于活动动状状态态并指向并
7、指向结结果集合的第一条果集合的第一条记录记录的前面的前面fetch a row by the cursor将游将游标标推向推向结结果集合中的下一条果集合中的下一条记录记录,读读出游出游标标所指所指向向记录记录的的值值并并赋给对应赋给对应的主的主语语言言变变量量One-Row-at-a-Time Principleclose the cursor关关闭闭所使用的游所使用的游标标,释释放相关的系放相关的系统资统资源源11112007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理qThe Declare Cursor StatementEXEC SQL DEC
8、LARE cursor-name CURSOR FORsubquery ORDER BY.FOR READ ONLY|UPDATE OF columnname,.;如果如果查询语查询语句的句的执执行行结结果是一个元果是一个元组组的集合,那么需的集合,那么需要使用游要使用游标标来来获获取取结结果集合中的每一个元果集合中的每一个元组组仅仅当用当用户户确信只可能返回确信只可能返回单单个个结结果元果元组组的情况下才可的情况下才可以使用以使用SELECTINTO形式的嵌入式形式的嵌入式SQL查询查询语语句句12122007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理
9、管理 定定义义游游标标qdeclare a cursorEXEC SQL DECLARE agent_dollars CURSOR FORselect aid,sum(dollars)from orderswhere cid=:cust_idgroup by aid;means multiple rows in result set search by customers id(stored in host variable cust_id)when open the cursor agent_dollarsdefine the cursor name 13132007年度-教育部-IBM精品
10、课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理 打开游打开游标标qopen the cursor.EXEC SQL OPEN agent_dollars;.execute the select statementafter open the cursor,the pointer of the cursor has been placed in the position before the first row in result set.before open the cursor,you must place cno value of customers id in the
11、host variable cust_id using in the declare statement of cursor agent_dollars.14142007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理 取游取游标标qfetch the result rowswhile(TRUE)/*loop to fetch rows*/exec sql fetch agent_dollars into:agent_id,:dollar_sum;printf(%s%11.2fn,agent_id,dollar_sum);/*end fetch loop*
12、/1)move the pointer of cursor to the next row,then the next row is current row2)fetch the current rows value into host variables:agents id to agent_id,summation of dollars to dollar_sum15152007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理 取游取游标标qend fetch loopexec sql whenever not found goto finish;.w
13、hile(TRUE)exec sql fetch.into.;.finish:exec sql close agent_dollars;declare not found event processingexecute this statement after fetch loop when not found event is occur16162007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理 关关闭闭游游标标qclose the cursor .EXEC SQL CLOSE agent_dollars;.1)close the cursor,a
14、nd release the result set and other resource in DBMS2)after close the cursor,it can be opened again17172007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.3 游游标标管理管理-可可滚动滚动游游标标qScrollable CursorsEXEC SQL DECLARE cursor_name INSENSITIVE SCROLL CURSOR WITH HOLD FORsubquery UNION subquery ORDER BY.FOR READ ONLY|FOR U
15、PDATE OF columnname.;EXEC SQL FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE value_spec FROM cursor_name INTO.;18182007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.4 诊诊断管理断管理q在在进进行数据交行数据交换时换时,数据主体,数据主体发发出数据交出数据交换请换请求后,求后,数据客体返回两种信息:数据客体返回两种信息:所所请请求的数据求的数据值值执执行的状行的状态值态值,而,而这这种状种状态值态值又被称又被称为诊为诊断断值值,而生成、而生成、获获取取诊诊断
16、断值值的管理称的管理称诊诊断管理断管理1.诊诊断区域断区域2.诊诊断操作断操作19192007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQL1.什么是什么是动态动态SQL?在嵌入式在嵌入式SQL编编程中,很多程中,很多时时候候编编程人程人员员无法确无法确定到底定到底应该应该做什么工作,所使用的做什么工作,所使用的SQL语语句也不句也不能能预预先确定,需要根据程序的先确定,需要根据程序的实际实际运行情况来决运行情况来决定,也就是根据定,也就是根据实际实际情况来生成并情况来生成并调调用用SQL语语句。句。这样这样的的SQL语语句被称句被称为为动态动态SQL20
17、202007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQLq动态动态SQL语语句的可句的可变变性性SQL语语句正文句正文动态动态可可变变变变量个数量个数动态动态可可变变类类型型动态动态可可变变SQL语语句引用句引用对对象象动态动态可可变变q相相对对地,事先能地,事先能够够确定下来的嵌入式确定下来的嵌入式SQL语语句又称句又称为为静静态态SQL静静态态SQL与与动态动态SQL的的优优缺点比缺点比较较(next)21212007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQLq静静态态SQL在通在通过预编译时过预编译时,SQ
18、L命令就被分析并命令就被分析并为为它它们们的的执执行作好了相行作好了相应应的准的准备备工作。在程序运行工作。在程序运行时时,只,只需要需要调调用用预预先先优优化好的化好的访问访问路径路径优优点点:性能好:性能好缺点缺点:只能根据缺省参数:只能根据缺省参数值进值进行行优优化,其化,其访问访问路径并非是最路径并非是最优访问优访问路径路径q动态动态SQL程序在运行程序在运行时动态时动态生成的生成的SQL命令命令优优点点:可以根据运行:可以根据运行时时的数据的数据库库最新情况最新情况选择选择最最优访问优访问路径路径缺点缺点:动态动态地地进进行行SQL语语句的句的语语法分析和法分析和访问访问路径路径选择
19、选择22222007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQL2.在什么情况下需要使用在什么情况下需要使用动态动态SQL?应应用程序需要在用程序需要在执执行行过过程中生成程中生成SQL语语句;句;SQL语语句用到的句用到的对对象在象在预编译时预编译时不存在;不存在;希望希望SQL语语句的句的执执行能行能够够根据根据执执行行时时的数据的数据库库系系统统内部的内部的统计统计信息来采用最信息来采用最优优的的访问访问策略策略23232007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQL3.嵌入式嵌入式动态动态SQL的的语语
20、句句有关描述符区的操作有关描述符区的操作语语句句有关有关动态动态SQL的使用的使用语语句句q描述符区(描述符区(descriptor area)应应用程序与数据用程序与数据库库需需进进行信息交互的区域行信息交互的区域24242007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQL3.有关有关动态动态SQL使用使用语语句句qPrepare语语句句:为执为执行行对对数据数据库库的的访问访问操作而准操作而准备备一一个存个存储储在主在主变变量中的量中的SQL语语句句Prepare into FROM;【例例】prepare s1 from :mystatement;
21、【例例】prepare s2 into :mysqlda from :myquery;25252007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQLqDescribe语语句句:获获得一个已准得一个已准备备好的好的SQL语语句的句的结结果集的描述信息果集的描述信息Describe into;【例例】describe s1 into :mysqlda;26262007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQLqExecute语语句句:执执行一个已准行一个已准备过备过的的SQL语语句(非句(非select语语句)句)Ex
22、ecute using 【例例】Execute s1【例例】Execute s1 using :x,:y必需使用游必需使用游标标来来处处理理动态动态SQL查询查询命令命令qExecute immediate:立即立即执执行一条行一条SQL命令命令等价于等价于 prepare+execute27272007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQL4.动态动态SQL的分的分类类q直接直接执执行行:不:不带带参数的非参数的非查询类动态查询类动态SQL的的执执行。例:行。例:EXEC SQL BEGIN DECLARE SECTION;Char stmt10
23、24;EXEC SQL END DECLARE SECTION;do Printf(“请输入非入非查询类SQL语句:句:”);Scanf(“%s”,&stmt);If(strcmp(stmt,“quit”)=0)break;EXEC SQL EXECUTE IMMEDIATE :stmt;while(1);28282007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQLq带动态带动态参数参数:在非:在非查询类查询类SQL语语句中使用到一些未句中使用到一些未确定的确定的变变量(量(带带参数)参数)【例例】根据学生的姓名来删除学生根据学生的姓名来删除学生Strc
24、py(stmt,“delete from S where Sn=?”);/*?代表命令参数?代表命令参数*/EXEC SQL PREPARE s1 FROM :stmt;/*输入一个学生的姓名到主入一个学生的姓名到主变量量myname中中*/EXEC SQL EXECUTE s1 USING :myname;/*用主用主变量量 myname 的的值代替原来的代替原来的?*/29292007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 6.2.5 动态动态SQLq动态查询动态查询:需要:需要查询结查询结果的果的动态查询类动态查询类SQL语语句,且句,且查询查询的的结结果果属性不确定,
25、一般情况下需要属性不确定,一般情况下需要结结合游合游标标来使用来使用用用prepare语语句准句准备备一条一条动态查询类动态查询类SQL语语句句利用准利用准备备好的好的语语句定句定义义游游标标EXEC SQL DECLARE CURSOR FOR ;打开游标打开游标EXEC SQL OPEN USING ;推进游标推进游标EXEC SQL FETCH INTO|USING DESCRIPTOR;关闭游标关闭游标30302007年度-教育部-IBM精品课程-南京大学计算机科学与技术系 数据库中的数据交换数据库中的数据交换6.1 概述概述6.2 数据交数据交换换的管理的管理6.3 数据交数据交换换
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 中的 数据 交换
限制150内