欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    [IT认证]嵌入式SQL.ppt

    • 资源ID:4593936       资源大小:203KB        全文页数:34页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [IT认证]嵌入式SQL.ppt

    ,嵌入式SQL的概述嵌入式SQL语句与主语言之间的通信游标动态SQL简介,4.7.1嵌入式SQL的概述,SQL语言提供了两种不同的使用方式:交互式、嵌入式。这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充。对ESQL,RDBMD一般采用预编译方法处理即由RDBMS的预处理程序对源程序进行扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码。为了区分SQL语句与主语言语句,需要在所有SQL语句前加前缀EXEC SQL,其结束标志随主语言的不同而不同。,以C为主语言的嵌入式SQL语句的一般形式 EXEC SQL;例:EXEC SQL DROP TABLE PRODUCT;以COBOL作为主语言的嵌入式SQL语句的一般形式 EXEC SQL END-EXEC例:EXEC SQL DROP TABLE PRODUCT END-EXEC注意:根据嵌入式SQL语句作用不同,分为可执行语句和说明性语句。允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句,允许出现说明语句的地方,都可以写说明性SQL语句。,4.7.2嵌入式SQL语句与主语言之间的通信,将SQL嵌入到高级语言中混合编程SQL语言中描述性的面向集合的语句负责操纵数据库高级语言中过程性的面向记录的语句负责控制程序流程。这时程序中会含有两种不同计算模型的语句,它们之间应该如何通信呢?,数据库工作单元和源程序工作单元之间的通信主要包括:向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区(SQL COMMUNICATION AREA,简称SQLCA)实现。主语言向SQL语句提供参数,主要由主变量(HOST VARIABLE)实现。将SQL语句查询数据库的结果交主语言进一步处理,主要由主变量和游标(CURSOR)实现。,1.SQL通信区,SQL语句执行后,DBMS反馈给应用程序若干信息主要包括描述系统当前工作状态和描述运行环境。这些信息将送到SQL通信区SQLCA中,应用程序从SQLCA中取出这些状态信息,据此决定接下来执行的语句。SQLCA的内容与所执行的SQL语句有关,与该SQL语句的执行情况有关,如在执行删除语句DELETE后,不同的执行情况,SQLCA中有不同的信息:违反数据保护规则,操作拒绝;没有满足条件的行,一行也没有删除;成功删除,并有删除的行数;无条件删除警告信息;由于各种原因,执行出错等。SQLCA是一个数据结构,其使用方法:首先定义SQLCA,即用EXEC SQL INCLUDE SQLCA加以定义;SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE;如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错;应用程序每执行完一条SQL 语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。,2.主变量,在SQL语句中使用的主语言程序变量简称为主变量(HOST VARIABLE),嵌入式SQL语句中可以用主变量来输入或输出数据。根据其作用不同主变量分为两种类型:输入主变量,由应用程序对其赋值,SQL语句引用;输出主变量,由SQL语句赋值或设置状态信息,返回给应用程序。有时一个主变量有可能既是输入主变量又是输出主变量。,一个主变量可以附带一个指示变量(INDICATOR VARIABLE)。指示变量是一个整型变量,用来“指示”所指主变量的值或条件。输入主变量可以利用指示变量赋空值。输出主变量可以利用指示变量检测出是否空值,值是否被截断。主变量说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现.为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(:)作为标志。指示变量前也必须加冒号标志,必须紧跟在所指主变量之后。在SQL语句之外(主语言语句中)使用主变量和指示变量可以直接引用,不必加冒号。,3.游标(CURSOR),SQL语言与主语言具有不同数据处理方式。SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录.而主语言是面向记录的,一组主变量一次只能存放一条记录,仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式。游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。,例:带有嵌入式SQL的一小段C程序.EXEC SQL INCLUDE SQLCA;/*(1)定义SQL通信区*/EXEC SQL BEGIN DECLARE SECTION;/*(2)说明主变量*/INT USER_ID;CHAR ADDRESS(100);CHAR HPHONE;EXEC SQL END DECLARE SECTION;MAIN()EXEC SQL DECLARE C1 CURSOR FOR SELECT ID,ADDRESS,HOME_PHONE FROM USER;/*(3)游标操作(定义游标)*/*从USER表中查询 ID,ADDRESS,HOME_PHONE*/,EXEC SQL OPEN C1;/*(4)游标操作(打开游标)*/FOR(;)EXEC SQL FETCH C1 INTO:USER_ID,:ADDRESS,:HPHONE;/*(5)游标操作(将当前数据放入主变量并推进游标指针)*/IF(SQLCA.SQLCODE SUCCESS)/*(6)利用SQLCA中的状态信息决定何时退出循环*/BREAK;PRINTF(USERID:%D,ADDRESS:%S,HOMEPHONE:%D,:USER_ID,:ADDRESS,:HPHONE);/*输出查询结果*/EXEC SQL CLOSE C1;/*(7)游标操作(关闭游标)*/,4.7.3游标,必须使用游标的SQL语句有:查询结果为多条记录的SELECT语句、CURRENT形式的UPDATE语句、CURRENT形式的DELETE语句1.查询结果为多条记录的SELECT语句一般情况下,SELECT语句查询结果是多条记录,因此需要使用游标,将多条记录一次一条送主程序处理,从而将对集合的操作转换为对单个记录的处理。,使用游标的步骤:,说明游标打开游标移动游标指针,然后取当前记录关闭游标。,(1)说明游标,使用DECLARE语句定义游标。语句格式EXEC SQL DECLARE CURSOR FOR;注意:是一条说明性语句,这时DBMS并不执行SELECT指定的查询操作。(2)打开游标,使用OPEN语句将定义的游标打开。语句格式 EXEC SQL OPEN;其功能是打开游标,实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中,这时游标处于活动状态,指针指向查询结果集中第一条记录之前。,(3)移动游标指针,然后取当前记录使用FETCH语句,推进游标,然后取出当前记录。语句格式 EXEC SQL FETCH NEXT|PRIOR|FIRST|LAST FROM INTO,.;其功能是指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。注意:先移动游标指针,再取数据。NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。NEXT:向前推进一条记录 PRIOR:向后退一条记录 FIRST:推向第一条记录 LAST:推向最后一条记录 缺省值为NEXT,注意:,主变量必须与SELECT语句中的目标列表达式具有一一对应关系。FETCH语句通常用在一个循环结构中,通过循环执行FETCH语句逐条取出结果集中的行进行处理。为进一步方便用户处理数据,现在一些关系数据库管理系统对FETCH语句做了扩充,允许用户向任意方向以任意步长移动游标指针,(4)关闭游标,使用CLOSE语句关闭游标,语句格式 EXEC SQL CLOSE;其功能是关闭游标,释放结果集占用的缓冲区及其它资源。注意:游标被关闭后,就不再和原来的查询结果集相联系,被关闭的游标可以再次被打开,与新的查询结果相联系。,例4.128 查询某类商品的信息(商品编号、商品名称、商品价格)。要查询的类别编号由用户在程序运行过程中指定,放在主变量SORTKINDID中。,.EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;./*说明主变量 SORTKINDID,HID,HNAME,HPRICE*/EXEC SQL END DECLARE SECTION;.GETS(SORTKINDID);/*为主变量SORTKINDID赋值*/.EXEC SQL DECLARE PC CURSOR FOR SELECT ID,NAME,PRICE FROM PRODUCT WHERE SORTKIND_ID=:SORTKINDID;/*说明游标*/,EXEC SQL OPEN PC/*打开游标*/FOR(;)/*用循环结构逐条处理结果集中的记录*/EXEC SQL FETCH PC INTO:HID,:HNAME,:PRICE;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/IF(SQLCA.SQLCODE SUCCESS)BREAK;/*若所有查询结果均已处理完或出现SQL语句错误,则退出循环*/*由主语言语句进行进一步处理*/.;EXEC SQL CLOSE PC;/*关闭游标*/.,2.CURRENT形式的UPDATE语句和DELETE语句,CURRENT形式的UPDATE语句和DELETE语句可以做到如果只想修改或删除其中某个记录,用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,用CURRENT形式的UPDATE语句和DELETE语句修改或删除之。步骤:DECLARE 说明游标 OPEN打开游标,把所有满足查询条件的记录从指定表取至缓冲区 FETCH推进游标指针,并把当前记录从缓冲区中取出来送至主变量 检查该记录是否是要修改或删除的记录,是则处理之 重复第和步,用逐条取出结果集中的行进行判断和处理 CLOSE 关闭游标,释放结果集占用的缓冲区和其他资源,为UPDATE语句说明游标,语句格式EXEC SQL DECLARE CURSOR FOR FOR UPDATEOF;注意:FOR UPDATE OF 短语用于指明检索出的数据在指定列上是可修改的,以便DBMS进行并发控制。,为DELETE语句说明游标,语句格式EXEC SQL DECLARE CURSOR FOR FOR UPDATE;FOR UPDATE短语提示DBMS进行并发控制,修改或删除当前记录,经检查缓冲区中记录是要修改或删除的记录,则用UPDATE语句或DELETE语句修改或删除该记录语句格式 WHERE CURRENT OF WHERE CURRENT OF WHERE CURRENT OF 子句表示修改或删除的是该游标中最近一次取出的记录。注意:当游标定义中的SELECT语句带有UNION或ORDER BY子句时,或者该SELECT语句相当于定义了一个不可更新的视图时,不能使用CURRENT形式的UPDATE语句和DELETE语句。,例4.129 对某地区用户的信息,根据用户的要求修改某些人的HOME_PHONE字段。,思路:查询某个地区的所有用户信息(要查询的地名由主变量HADDRESS指定),然后根据用户的要求修改其中某些记录的HOME_PHONE字段.EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;./*说明主变量 HADDRESS,HID,HNAME,NEWPHONE*/.EXEC SQL END DECLARE SECTION;.GETS(HADDRESS);/*为主变量HADDRESS赋值*/.,EXEC SQL DECLARE UC CURSOR FOR SELECT ID,NAME,ADDRESS FROM USER WHERE ADDRESS=:HADDRESS FOR UPDATE OF ADDRESS;/*说明游标*/EXEC SQL OPEN UC/*打开游标*/FOR(;)/*用循环结构逐条处理结果集中的记录*/EXEC SQL FETCH UC INTO:HID,:HNAME,:HADDRESS;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/IF(SQLCA.SQLCODE SUCCESS)BREAK;/*若所有查询结果均已处理完或出现SQL语句错误,则退出循环*/PRINTF(USER ID%D,USER NAME%S,USER ADDESS%S,HID,HNAME,HADDRESS);/*显示该记录*/PRINTF(UPDATE PHONE?);/*问用户是否要修改*/SCANF(%C,IF(YN=Y OR YN=Y)/*需要修改*/PRINTF(INPUT NEW PHONE:);SCANF(%S,/*关闭游标*/.,例4.130 对某个地区的用户信息,根据的要求删除其中某些人的记录。,.EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;./*说明主变量 HADDRESS,HID,HNAME,NEWPHONE*/.EXEC SQL END DECLARE SECTION;.GETS(HADDRESS);/*为主变量HADDRESS赋值*/.EXEC SQL DECLARE UC CURSOR FOR SELECT ID,NAME,ADDRESS FROM USER WHERE ADDRESS=:HADDRESS FOR UPDATE;/*说明游标*/,EXEC SQL OPEN UC/*打开游标*/FOR(;)/*用循环结构逐条处理结果集中的记录*/EXEC SQL FETCH UC INTO:HID,:HNAME,:HADDRESS;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/IF(SQLCA.SQLCODE SUCCESS)BREAK;/*若所有查询结果均已处理完或出现SQL语句错误,则退出循环*/PRINTF(USER ID%D,USER NAME%S,USER ADDESS%S,HID,HNAME,HADDRESS);/*显示该记录*/PRINTF(DELETE?);/*问用户是否要修改*/SCANF(%C,IF(YN=Y OR YN=Y)/*需要删除*/,EXEC SQL DELETE FROM PRODUCT WHERE CURRENT OF UC;/*删除当前记录*/;.;EXEC SQL CLOSE UC;/*关闭游标*/.,4.7.4动态SQL简介,前面介绍的嵌入式SQL语句可以在程序运行过程中根据实际需要输入WHERE子句或HAVING子句中某些变量的值。语句中主变量的个数与数据类型在预编译时都是确定的,只有是主变量的值是程序运行过程中动态输入的。这类嵌入式SQL语句为静态SQL语句。但这类静态SQL语句提供的编程灵活性在许多情况下仍显得不足,不能编写更为通用的程序。例如查询条件是不确定的,要查询的属性列也是不确定的,这时就无法用一条静态SQL语句实现了。,动态SQL方法允许在程序运行过程中临时“组装”SQL语句。应用范围包括在预编译时下列信息不能确定时:SQL语句正文、主变量个数、主变量的数据类型、SQL语句中引用的数据库对象(列、索引、基本表、视图等)。(1)语句可变,临时构造完整的SQL语句(2)条件可变,WHERE子句中的条件及HAVING短语中的条件(3)数据库对象、查询条件均可变,SELECT子句中的列名、FROM子句中的表名或视图名、WHERE子句中的条件、HAVING短语中的条件,常用动态SQL语句:EXECUTE IMMEDIATE、PREPARE、EXECUTE、DESCRIBE使用动态SQL技术更多的是涉及程序设计方面的知识,而不是SQL语言本身。这里就不详细介绍了,感兴趣的读者可以参阅有关书籍。,4.8本章小结,SQL是关系数据库的标准语言,已广泛地应用在商业系统中。SQL语言主要由数据定义、数据操纵、数据控制、嵌入式SQL的四部分组成。SQL的数据定义包括对基本表、视图、索引的创建,修改和撤销。SQL数据操纵包括数据查询及数据更新两部分。SQL的数据查询使用SELECT语句实现,兼有关系代数和元组演算的特点。SQL语言的查询功能是最丰富的,也是最复杂的,读者应加强联系。SQL数据更新包括数据的插入、删除和修改等三种操作。SQL数据控制包括权限的授予及收回。嵌入式SQL涉及SQL语言的宿主语言程序中的使用规定,以解决两种语言间的不一致和相互联系的问题,同时还介绍动态SQL语句,

    注意事项

    本文([IT认证]嵌入式SQL.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开