《数据库系统原理》教案
教学内容 教学周次 授课对象 第五章 数据库编程 教材章节 第五章(第5节) 第八章 教学课时 8 计算机科学与技术 信息管理与信息系统 教学环境 多媒体教室 教学目标 本章介绍使用编程方法对数据库进行操纵的编程技术。 教学重点 1、 嵌入式SQL中游标的概念和用法。 2、 存储过程的基本概念、结构和语法。 3、 存储过程的基本概念、类型以及各种触发器的创建。 4、 ODBC的工作流程、使用ODBC开发应用程序。 系统开发中存储过程和触发器的使用。 使用ODBC进行数据库应用程序的设计,实现异构数据库之间的访问。 本章分4次讲述,每次2学时,每次主要讲述以下内容介绍如下: 第一次:嵌入式SQL。 第二次:存储过程。 第三次:触发器。 第四次:ODBC编程。 教学难点 教学过程 作业与要求 P183第6、7、8、9、10、11、13、16、17。 备注
本提交文档内容与次序与实际讲课内容与次序有不一致的地方。 1
第五章 数据库编程
在数据库系统的应用开发中常常使用数据库编程方法对数据库进行操纵,主要包括:嵌入式SQL,SQL的过程化扩展PL/SQL和存储过程,触发器,使用ODBC设计与开发数据库应用系统的方法。
5.1嵌入式SQL
SQL语言有两种不同的使用方式:
*在终端交互方式下使用(作为独立语言在交互环境下使用的SQL语言)
*嵌入到某种高级语言中使用(因为对查询结果不能做进一步处理,利用高级语言的过程性结构来弥补SQL语言在实现复杂应用方面的不足) **主语言(宿主语言):嵌入SQL的高级语言
例:建立我班同学的档案信息
学生表student(sno,sname,sage,ssex,sdept)
EXEC SQL INCLUDE SQLCA; (1)定义SQL通信区 EXEC SQL BEGIN DECLARE SECTION; (2)说明主变量
CHAR sno(8); CHAR sname(20); CHAR ssex(1); CHAR sdept(10); INT sage;
EXEC SQL END DECLARE SECTION; Main() {
gets(sdept); while(1) {
结束控制;
从键盘读入一个学生的数据到主变量中; EXEC SQL INSERT
INTO student(sno,sname,sage,ssex,sdept) VALUES(:sno,:sname,:sage,:ssex,:sdept)
IF (sqlca.sqlcode<>SUCCESS) Break; } }
说明:
1、 区分SQL语言与主语言语句,
所有SQL语句前都必须加前缀EXEC SQL,结束标志随主语言的不同而不同,有些语言用;有写用END-EXEC
2、 嵌入式SQL分两类:说明性语句(主要有定义SQL通信区、说明主变量语句);可执行
语句(数据定义、数据控制、数据操纵)。
2
*数据定义、数据控制只要在SQL语句前加EXEC SQL,其他方面基本上同交互方式下使用的SQL。
*数据操纵,与交互式比因使用主变量有所略有不同。
3、 SQL通信区:是一个数据结构,其中主要包括描述系统当前的工作状态(每条SQL语
句运行成功或失败信息,使主语言能据此控制程序流程)和运行环境的各种数据。如PB的SQLCA称为事物对象,有16个属性,其中10个提供数据库管理系统(DBMS)所需的连接信息,6个用于返回每条SQL语句运行成功或失败信息。其中属性sqlca.sqlcode表示当前SQL操作成功或失败(0成功,100表示SELECT语句找不到符合条件的数据,-1表示SQL操作出错)
4、 主变量:在SQL语句中使用的主语言程序变量。
主变量的主要作用。
*可以指定向数据库中插入的数据。通过输入主变量(由应用程序对其赋值,SQL语句引用)。如上例。
*可以指定WHERE子句或HAVING子句中的条件。 *可以得到SQL语句的结果数据和状态。通过输出主变量(由SQL语句对其赋值,返回给应用程序)。 Givensno=2001;
EXEC SQL SELECT sno,sname,sage,ssex,sdept
INTO :sno,:sname,:sage,:ssex,:sdept FROM student
WHERE sno=:givensno;
查询结果为单记录的SELECT语句说明(P117): *明确结果为单记录(如结果为多记录出错) *增加INTO
*将数据库中的数据修改为指定的值。
EXEC SQL UPDATE Student SET Ssge=sage+:xx
5、 嵌入式SQL语句与主程序间的通信小节
1) 向主语言传递SQL语句的执行状态信息,使主语言能据此控制程序流程。通过SQL
通信区。
2) 主语言向SQL语句提供参数。通过主变量
3) 将SQL语句查询数据库的结果交主语言进一步处理。通过主变量。 6、 使用游标的SQL
因一组主变量一次只能存放一条记录,仅使用主变量不能完全满足SQL语句向应用程序输出数据的要求。
例:查询某个系的学生信息。要查询的系名有用户在程序运行过程中指定,放在主变量deptname.
EXEC SQL INCLUDE SQLCA; (1)定义SQL通信区 EXEC SQL BEGIN DECLARE SECTION; (2)说明主变量
CHAR sno(8); CHAR sname(20); CHAR ssex(1); CHAR sdept(10);
3
INT sage;
EXEC SQL END DECLARE SECTION; Main() {
gets(deptname); // 为主变量赋值
EXEC SQL DECLARE SX CURSOR FOR SELECT sno, sname, sage, ssex
FROM student
WHERE sdept=:deptname; //说明游标
EXEC SQL open SX ; //打开游标:执行SELECT 语句,把所有满足条件的记录取到缓冲区中,游标处于活动状态,指针指向查询结果集中的第一条记录。 WHILE (1) {
EXEC SQL FETCH SX INTO :sno , :sname , :sage , :ssex;
//推进游标,将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。
IF (sqlca.sqlcode<>SUCCESS)
Break; //若所有查询结果处理完或出现SQL语句错误,则推出循环。 /*由主语言作进一步处理*/ }
EXEC SQL CLOSE SX ; //关闭游标:释放结果集占用的缓冲区及其它资源。 }
游标的作用:通过游标把对集合的操作转换为对单记录的处理。
5.2 PL/SQL
PL/SQL是对 SQL的扩展,使其增加了过程化语句功能。PL/SQL程序的基本结构是块,每个块完成一个逻辑操作 1、常量变量的定义 2、常用语句:
? 赋值语句 ? 条件控制语句 ? 循环控制语句
5.3 存储过程
1、存储过程的定义
SQL Server的存储过程类似于编程语言中的“过程”。在使用Transact-SQL语言编程的过程中,将某些需要多次调用的实现某个特定任务的代码段编写成一个过程,将其保存在数据库中,并由SQL Server服务器通过过程名来调用它们,这些过程就叫做存储过程。
存储过程在创建时就被编译和优化,调用一次以后,相关信息就保存在内存中,下次调用时可以直接执行。
存储过程是存储在服务器上的一组预编译的T-SQL 语句,是一种封装重复任务操作的方法,具有强大的编程功能。 2、存储过程的优点
? 实现了模块化编程。
4
? 存储过程具有对数据库立即访问的功能。 ? 使用存储过程可以加快程序的运行速度。
? 使用存储过程可以减少客户机和服务器之间的通信量。 ? 方便实施企业规则。 3、存储过程的创建
使用Transact-SQL语句创建存储过程的语法格式: CREATE PROCEDURE 过程名([参数列表]) AS
<过程体>
例如,CREATE PROCEDURE [dbo].[xselect] AS insert into student (sno,sname,ssex,sage,sdept) values ('11','zhanglu','男',23,'IS')
insert into student (sno,sname, ssex,sage,sdept) values ('12','yangjing','女',22,'CS')
select * from student where sname<>'' 4、存储过程的执行
存储过程创建成功后,保存在数据库中。在SQL Server中可用EXECUTE命令来直接执行存储过程:
execute 存储过程名称 例如:执行前面创建的存储过程xselect, execute xselect
例1,创建一个无参存储过程StuScoreInfo,查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。
Use StudentDB
If exists (select name from sysobjects where name='StuScoreInfo' and type ='P') Drop procedure StuScoreInfo --删除已存在的存储过程 Go
Create procedure StuScoreInfo as
Select 班级= substring (student.sno, 1, 6), student.sno as 学号, sname as 姓名,ssex as 性别, course.cname as 课程名称, sc.grade as 考试成绩 from student, course, sc where student.sno=sc.sno and course.cno=sc.cno go
执行存储过程:
exec StuScoreInfo;
例2,创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的信息。 Use StudentDB
If exists (select name from sysobjects where name='stu_info' and type ='P') Drop procedure stu_info --删除已存在的存储过程 Go
Create procedure stu_info @sno char(5) as
Select 班级= substring (student.sno, 1, 6), student.sno as 学号, sname as 姓名, ssex as 性别, sage as 年龄, sdept as 所在系 from student where sno=@sno
5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据库系统原理教案在线全文阅读。
相关推荐: