数据库系统概论课件第三章(5)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

AnIntroductiontoDatabaseSystem数据库系统概论AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL(续4)AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结AnIntroductiontoDatabaseSystem3.7嵌入式SQLSQL语言提供了两种不同的使用方式:交互式嵌入式为什么要引入嵌入式SQLSQL语言是非过程性语言事务处理应用需要高级语言这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充AnIntroductiontoDatabaseSystem3.7.1嵌入式SQL的一般形式为了区分SQL语句与主语言语句,需要:前缀:EXECSQL结束标志:随主语言的不同而不同以C为主语言的嵌入式SQL语句的一般形式EXECSQLSQL语句;例:EXECSQLDROPTABLEStudent;以COBOL作为主语言的嵌入式SQL语句的一般形式EXECSQLSQL语句END-EXEC例:EXECSQLDROPTABLEStudentEND-EXECAnIntroductiontoDatabaseSystemDBMS处理宿主型数据库语言SQL的方法预编译修改和扩充主语言使之能处理SQL语句AnIntroductiontoDatabaseSystem预编译1.由DBMS的预处理程序对源程序进行扫描,识别出SQL语句2.把它们转换成主语言调用语句,以使主语言编译程序能识别它3.最后由主语言的编译程序将整个源程序编译成目标码。AnIntroductiontoDatabaseSystem嵌入SQL语句说明性语句嵌入SQL语句数据定义可执行语句数据控制数据操纵允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句允许出现说明语句的地方,都可以写说明性SQL语句AnIntroductiontoDatabaseSystem3.7.2嵌入式SQL语句与主语言之间的通信将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句SQL语句描述性的面向集合的语句负责操纵数据库高级语言语句过程性的面向记录的语句负责控制程序流程AnIntroductiontoDatabaseSystem工作单元之间的通信方式1.SQL通信区向主语言传递SQL语句的执行状态信息主语言能够据此控制程序流程2.主变量1)主语言向SQL语句提供参数2)将SQL语句查询数据库的结果交主语言进一步处理3.游标解决集合性操作语言与过程性操作语言的不匹配AnIntroductiontoDatabaseSystem1.SQL通信区SQLCA:SQLCommunicationAreaSQLCA是一个数据结构SQLCA的用途SQL语句执行后,DBMS反馈给应用程序信息描述系统当前工作状态描述运行环境这些信息将送到SQL通信区SQLCA中应用程序从SQLCA中取出这些状态信息,据此决定接下来执行的语句AnIntroductiontoDatabaseSystemSQLCA的内容与所执行的SQL语句有关与该SQL语句的执行情况有关例:在执行删除语句DELETE后,不同的执行情况,SQLCA中有不同的信息:违反数据保护规则,操作拒绝没有满足条件的行,一行也没有删除成功删除,并有删除的行数无条件删除警告信息由于各种原因,执行出错AnIntroductiontoDatabaseSystemSQLCA的使用方法定义SQLCA用EXECSQLINCLUDESQLCA加以定义使用SQLCASQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错应用程序每执行完一条SQL语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理AnIntroductiontoDatabaseSystem2.主变量什么是主变量嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据在SQL语句中使用的主语言程序变量简称为主变量(HostVariable)AnIntroductiontoDatabaseSystem主变量(续)主变量的类型输入主变量由应用程序对其赋值,SQL语句引用输出主变量由SQL语句赋值或设置状态信息,返回给应用程序一个主变量有可能既是输入主变量又是输出主变量AnIntroductiontoDatabaseSystem主变量(续)主变量的用途输入主变量指定向数据库中插入的数据将数据库中的数据修改为指定值指定执行的操作指定WHERE子句或HAVING子句中的条件输出主变量获取SQL语句的结果数据获取SQL语句的执行状态AnIntroductiontoDatabaseSystem主变量(续)指示变量一个主变量可以附带一个指示变量(IndicatorVariable)什么是指示变量整型变量用来“指示”所指主变量的值或条件指示变量的用途输入主变量可以利用指示变量赋空值输出主变量可以利用指示变量检测出是否空值,值是否被截断AnIntroductiontoDatabaseSystem主变量(续)在SQL语句中使用主变量和指示变量的方法1)说明主变量和指示变量BEGINDECLARESECTION..................(说明主变量和指示变量).........ENDDECLARESECTIONAnIntroductiontoDatabaseSystem主变量(续)2)使用主变量说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(:)作为标志AnIntroductiontoDatabaseSystem主变量(续)3)使用指示变量指示变量前也必须加冒号标志必须紧跟在所指主变量之后AnIntroductiontoDatabaseSystem主变量(续)在SQL语句之外(主语言语句中)使用主变量和指示变量的方法可以直接引用,不必加冒号AnIntroductiontoDatabaseSystem3.游标(cursor)为什么要使用游标SQL语言与主语言具有不同数据处理方式SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录AnIntroductiontoDatabaseSystem游标(续)主语言是面向记录的,一组主变量一次只能存放一条记录仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式AnIntroductiontoDatabaseSystem游标(续)什么是游标游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果每个游标区都有一个名字用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理AnIntroductiontoDatabaseSystem嵌入式SQL语句与主语言之间的通信(续)小结在嵌入式SQL中,SQL语句与主语言语句分工非常明确SQL语句:直接与数据库打交道主语言语句1.控制程序流程2.对SQL语句的执行结果做进一步加工处理AnIntroductiontoDatabaseSystem嵌入式SQL语句与主语言之间的通信(续)SQL语句用主变量从主语言中接收执行参数,操纵数据库SQL语句的执行状态由DBMS送至SQLCA中主语言程序从SQLCA中取出状态信息,据此决定下一步操作如果SQL语句从数据库中成功地检索出数据,则通过主变量传给主语言做进一步处理SQL语言和主语言的不同数据处理方式通过游标来协调AnIntroductiontoDatabaseSystem嵌入式SQL语句与主语言之间的通信(续)*例:带有嵌入式SQL的一小段C程序............EXECSQLINCLUDESQLCA;/*(1)定义SQL通信区*/EXECSQLBEGINDECLARESECTION;/*(2)说明主变量*/CHARtitle_id(7);CHARtitle(81);INTroyalty;EXECSQLENDDECLARESECTION;AnIntroductiontoDatabaseSystem嵌入式SQL语句与主语言之间的通信(续)main(){EXECSQLDECLAREC1CURSORFORSELECTtit_id,tit,royFROMtitles;/*(3)游标操作(定义游标)*//*从titles表中查询tit_id,tit,roy*/EXECSQLOPENC1;/*(4)游标操作(打开游标)*/AnIntroductiontoDatabaseSystem嵌入式SQL语句与主语言之间的通信(续)for(;;){EXECSQLFETCHC1INTO:title_id,:title,:royalty;/*(5)游标操作(将当前数据放入主变量并推进游标指针)*/if(sqlca.sqlcodeSUCCESS)/*(6)利用SQLCA中的状态信息决定何时退出循环*/break;printf(TitleID:%s,Royalty:%d,:title_id,:royalty);printf(Title:%s,:title);/*打印查询结果*/}EXECSQLCLOSEC1;/*(7)游标操作(关闭游标)*/}AnIntroductiontoDatabaseSystem3.7嵌入式SQL3.7.1嵌入式SQL的一般形式3.7.2嵌入式SQL语句与主语言之间的通信3.7.3不用游标的SQL语句3.7.4使用游标的SQL语句3.7.5动态SQL简介AnIntroductiontoDatabaseSystem3.7.3不用游标的SQL语句不用游标的SQL语句的种类说明性语句数据定义语句数据控制语句查询结果为单记录的SELECT语句非CURRENT形式的UPDATE语句非CURRENT形式的DELETE语句INSERT语句AnIntroductiontoDatabaseSystem一、说明性语句说明性语句是专为在嵌入式SQL中说明主变量、SQLCA等而设置的说明主变量1.EXECSQLBEGINDECLARESECTION;2.EXECSQLENDDECLARESECTION;这两条语句必须配对出现,相当于一个括号,两条语句中间是主变量的说明说明SQLCA3.EXECSQLINCLUDESQLCAAnIntroductiontoDatabaseSystem二、数据定义语句例1建立一个“学生”表StudentEXECSQLCREATETABLEStudent(SnoCHAR(5)NOTNULLUNIQUE,SnameCHAR(20),SsexCHAR(1),SageINT,SdeptCHAR(15));AnIntroductiontoDatabaseSystem数据定义语句(续)数据定义语句中不允许使用主变量例:下列语句是错误的EXECSQLDROPTABLE:table_name;AnIntroductiontoDatabaseSystem三、数据控制语句例2把查询Student表权限授给用户U1EXECSQLGRANTSELECTONTABLEStudentTOU1;AnIntroductiontoDatabaseSystem四、查询结果为单记录的SELECT语句语句格式EXECSQLSELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]...INTO主变量[指示变量

1 / 108
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功