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