第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共9页第8章SQL系统环境本章主要讨论数据库的设计步骤以及每个步骤用到的方法。数据库的设计主要有四个步骤:需求分析、概念设计、逻辑设计和物理设计。本章的主要知识点包括:学习要点1、嵌入式SQL学习要点2、有关事物的嵌入式SQL学习要点3、SQL环境学习要点4、数据库的完整性学习要点5、SQL中的安全和用户权限学习要点1、嵌入式SQL1、什么是嵌入式SQL当一个程序既要访问数据库,又要处理数据时,把SQL语言嵌入程序设计语言即宿主语言中,将SQL语言访问数据库的功能和宿主语言的数据处理功能相结合,是目前解决该问题的最有效途径。这样使用的SQL称为嵌入式SQL。2、如何实现嵌入式SQL对于不同的DBMS和宿主语言,实现嵌入式SQL的方法基本相同,只是在一些特殊的地方略有差异。实现嵌入式SQL语言主要是实现说明部分的嵌入和执行部分的嵌入。以SQL嵌入C语言为例说明实现嵌入式SQL的方法。说明部分C语言和SQL语言之间是通过共享变量来进行数据的传送。共享变量是由宿主语言程序定义、用SQL的DECLARE语句说明,以后可在SQL语句中引用的宿主语言变量。共享变量需用以“EXECSQL”为前缀的说明语句说明,在说明语句的结尾加“;”。在SQL语句中引用共享变量时,每个共享变量前要加“:”。在共享变量中,有一个系统定义的特殊变量,称为SQLSTATE。在每执行一个SQL语句时,都要返回一个SQLSTATE代码,来表示这个SQL语句是否执行成功等情况。当SQLSTATE为全零时,表示SQL语句执行成功;当SQLSTATE为“02000”时,表示SQL语句已执行,但未找到元组。所有SQL语句中用到的共享变量,除系统定义的(例如SQLSTATE)以外,都必须在宿主程序中进行说明。说明语句的开头行为:EXECSQLBEGINDECLARESECTION;说明语句的结束行为:EXECSQLENDDECLARESECTION;在一个说明语句中定义几个共享变量,它们都是按照C语言的数据类型和格式进行定义的。EXECSQLBEGINDECLARESECTION;charsno[6],sname[20];intsage;charSQLSTATE[6];EXECSQLENDDECLARESECTION;执行部分第2页共9页第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共9页插入语句的格式为:EXECSQLINSERTINTOStudent(StudentNo,StudentName)VALUES(:sno,:sname);修改语句的格式为:EXECSQLUPDATEStudentSET(StudentName=:sname,StudentAge=:sage)WHEREStudentNo=:sno;删除语句的格式为:EXECSQLDELETEFROMStudentCourseWHEREStudentNo=(SELECTStudentNoFROMStudentWHEREStudentName=:sname);查询语句:当查询的结果只有一个元组时,EXECSQLSELECTStudentName,StudentDeptINTO:sname,:sdeptFROMStudentWHEREStudentNo=:sno;当查询的结果有多个元组时,需采用涉及到游标的查询方法。3、使用游标的SQL编程利用游标进行查询需要四种语句:说明游标语句、打开游标语句、推进语句和关闭游标语句。分析学生成绩的分布情况。首先从StudentCourse中取出每个元组的Grade;其次设置游标scCursor复盖这些元组;然后打开游标,使之处于初始位置;随后,推进游标,取出一个单分量元组放入共享变量grade;接着,确定该成绩属于哪一段,并在相应的统计上加1;不断推进游标,重复上述统计过程,直到元组全部取完,再关闭游标;最后打印统计结果。举例:假设分析学生成绩的分布情况,把统计结果划分为11段:0-9,10-19,20-29……90-99,100。首先从StudentCourse中取出每个元组的Grade;其次设置游标scCursor复盖这些元组;然后打开游标,使之处于初始位置;随后,推进游标,取出一个单分量元组放入共享变量grade;接着,确定该成绩属于哪一段,并在相应的统计上加1;不断推进游标,重复上述统计过程,直到元组全部取完,再关闭游标;最后打印统计结果。程序如下:#defineNO-TUPLE!(strcmp(SQLSTATE,"02000"))voidgradeSection(){inti,section,count[11];EXECSQLBEGINDECLARESECTION;intgrade;charSQLSTATE[6];EXECSQLENDDECLARESECTION;EXECSQLDECLAREscCursorCURSORFORSELECTGradeFROMSC;EXECSQLOPENscCursor;第3页共9页第...