[IT认证]嵌入式SQL.ppt
《[IT认证]嵌入式SQL.ppt》由会员分享,可在线阅读,更多相关《[IT认证]嵌入式SQL.ppt(34页珍藏版)》请在三一办公上搜索。
1、,嵌入式SQL的概述嵌入式SQL语句与主语言之间的通信游标动态SQL简介,4.7.1嵌入式SQL的概述,SQL语言提供了两种不同的使用方式:交互式、嵌入式。这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充。对ESQL,RDBMD一般采用预编译方法处理即由RDBMS的预处理程序对源程序进行扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码。为了区分SQL语句与主语言语句,需要在所有SQL语句前加前缀EXEC SQL,其结束标志随主语言的不同而不同。,以C为主语言的嵌入式SQL语句的一般形式 EXE
2、C 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语言中描述性的面向集合的语句负责操纵数据库高级语言中过程性的面向记录的语句负责控制程序流程。这时程序中会
3、含有两种不同计算模型的语句,它们之间应该如何通信呢?,数据库工作单元和源程序工作单元之间的通信主要包括:向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区(SQL COMMUNICATION AREA,简称SQLCA)实现。主语言向SQL语句提供参数,主要由主变量(HOST VARIABLE)实现。将SQL语句查询数据库的结果交主语言进一步处理,主要由主变量和游标(CURSOR)实现。,1.SQL通信区,SQL语句执行后,DBMS反馈给应用程序若干信息主要包括描述系统当前工作状态和描述运行环境。这些信息将送到SQL通信区SQLCA中,应用程序从SQLCA中取
4、出这些状态信息,据此决定接下来执行的语句。SQLCA的内容与所执行的SQL语句有关,与该SQL语句的执行情况有关,如在执行删除语句DELETE后,不同的执行情况,SQLCA中有不同的信息:违反数据保护规则,操作拒绝;没有满足条件的行,一行也没有删除;成功删除,并有删除的行数;无条件删除警告信息;由于各种原因,执行出错等。SQLCA是一个数据结构,其使用方法:首先定义SQLCA,即用EXEC SQL INCLUDE SQLCA加以定义;SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE;如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错;应用
5、程序每执行完一条SQL 语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。,2.主变量,在SQL语句中使用的主语言程序变量简称为主变量(HOST VARIABLE),嵌入式SQL语句中可以用主变量来输入或输出数据。根据其作用不同主变量分为两种类型:输入主变量,由应用程序对其赋值,SQL语句引用;输出主变量,由SQL语句赋值或设置状态信息,返回给应用程序。有时一个主变量有可能既是输入主变量又是输出主变量。,一个主变量可以附带一个指示变量(INDICATOR VARIABLE)。指示变量是一个整型变量,用来“指示”所指主变量的值或条件。输入主变量可以利用指示变量赋空
6、值。输出主变量可以利用指示变量检测出是否空值,值是否被截断。主变量说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现.为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(:)作为标志。指示变量前也必须加冒号标志,必须紧跟在所指主变量之后。在SQL语句之外(主语言语句中)使用主变量和指示变量可以直接引用,不必加冒号。,3.游标(CURSOR),SQL语言与主语言具有不同数据处理方式。SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录.而主语言是面向记录的,一组主变量一次只能存放一条记录,仅使用主变量并不能完全满足SQL语句向应用程序输
7、出数据的要求,嵌入式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()EXE
8、C 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;PRIN
9、TF(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语句查询结果是多条记录,因此需要使用游标,将多条记录一次一条送主程序处理,从而将对集合的操作转换为对单个记录的处理。,使用游标的步骤:,说明游标打开游标移动游标
10、指针,然后取当前记录关闭游标。,(1)说明游标,使用DECLARE语句定义游标。语句格式EXEC SQL DECLARE CURSOR FOR;注意:是一条说明性语句,这时DBMS并不执行SELECT指定的查询操作。(2)打开游标,使用OPEN语句将定义的游标打开。语句格式 EXEC SQL OPEN;其功能是打开游标,实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中,这时游标处于活动状态,指针指向查询结果集中第一条记录之前。,(3)移动游标指针,然后取当前记录使用FETCH语句,推进游标,然后取出当前记录。语句格式 EXEC SQL FETCH NEXT|PR
11、IOR|FIRST|LAST FROM INTO,.;其功能是指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。注意:先移动游标指针,再取数据。NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。NEXT:向前推进一条记录 PRIOR:向后退一条记录 FIRST:推向第一条记录 LAST:推向最后一条记录 缺省值为NEXT,注意:,主变量必须与SELECT语句中的目标列表达式具有一一对应关系。FETCH语句通常用在一个循环结构中,通过循环执行FETCH语句逐条取出结果集中的行进行处理。为进一步方便用户处理数据,现在一些关系数据库管理系统对FETC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IT认证 IT 认证 嵌入式 SQL

链接地址:https://www.31ppt.com/p-4593936.html