实验10 存储过程
1.实验目的
(1)掌握使用SQL Server管理平台和Transact-SQL语句创建存储过程、执行存储过程、修改存储过程、删除存储过程的用法。
(2)理解使用SQL Server管理平台和Transact-SQL语句查看存储过程定义、重命名存储过程的用法。
2.实验内容及步骤
请先附加studentsdb数据库,然后完成以下实验。
(1)CREATE PROCEDURE st_g
AS
BEGIN
SELECT x.学号,x.姓名,y.分数
FROM student_info x ,grade y
Where x.学号=y.学号
END
该程序完成的功能是创建一个存储过程,存储过程的功能是对student_info和grade表进行查询,然后输出学号,姓名和分数信息。
(2)设计一个存储过程proc_grade完成这样的功能:查询grade表中课程编号为’k002’的学号、分数信息,并使存储过程不能使用sp_helptext
查看(即加密),请编写程序实现。
答:create procedure proc_grade
with encryption
as
select学号,分数
from grade
where课程编号='k002'
--执行存储过程,进行验证
exec proc_grade
(3)修改存储过程proc_grade,查询grade表中课程编号为’k001’的学号、
分数信息,去掉proc_grade加密性,使其在运行时重新编译。
答:alter procedure proc_grade
with recompile
as
select学号,分数
from grade
where课程编号='k001'
--执行存储过程,进行验证
exec proc_grade
(4)在student_info 表中增加一列名为“手机号”,数据类型char(11)。
设计一个存储过程proc_tel,查询student_info表中末尾数字为5的手
机号码。
答:
craeate table student_info
add手机号char(11)
go
create procedure proc_tel
as
select手机号from student_info
where手机号like'%5'
--执行存储过程,进行验证
exec proc_tel
(5)设计一个存储过程proc_avg,输出grade表中每个学生的平均成绩。答:create procedure proc_avg
as
select学号,avg(分数)as平均成绩
from grade
group by学号
--执行存储过程,进行验证
exec proc_avg
(6)设计一个存储过程,用于修改指定学生(参数@sid char(4))指定课程(参数为@cid char(4))的分数(@score decimal(3,1)),编写并调用该存储过程,修改学号’0002’的学生的修读课程‘K003’的成绩改为96。编写并调用存储过程。
答:create procedure proc_modifyscore
@sid char(4),
@cid char(4),
@score decimal(3,1)
as
update grade set分数=@score
where学号=@sid and课程编号=@cid
--执行存储过程,进行验证
exec proc_modifyscore'0002','k003',96
(7)设计一个存储过程proc_list,查询grade表中指定课程(参数@cid
char(4))的成绩排名前3的学生成绩信息。编写程序并调用该存储过程。答:
alter procedure proc_list
@cid char(4)
as
select top 3 学号,分数
from grade
where课程编号=@cid
order by分数desc
--执行存储过程,进行验证
exec proc_list'k004'
(8)设计一个存储过程proc_credit完成这样的功能:输入学号@sid、课程名称@cname参数值,将查询curriculum、grade表,并从输出参数
@score、@credit获取该学生该课程的成绩和学分,如果分数大于等于60,
则返回对应课程的学分,否则返回学分值0,请编写程序并调用该存储过程。答:
方案一:利用set进行赋值(SET是SQL Server 中对已经定义的变量赋值的
方式)
create procedure proc_credit
@sid char(4),
@cname nchar(10),
@score decimal(3,1)output,
@credit int output
as
SELECT @score = grade.分数, @credit = curriculum.学分
FROM curriculum
JOIN grade ON curriculum.课程编号= grade.课程编号
WHERE grade.学号= @sid
AND curriculum.课程名称= @cname;
if (@score<60)
begin
--通过set进行赋值
set @credit=0
end
--执行查询
declare@score int,@credit int
exec proc_credit'0001','c语言程序设计',@score output,@credit output
select@score,@credit
方案二:利用case when 语法
create procedure proc_credit
@sid char(4),
@cname nchar(10),
@score decimal(3,1)output,
@credit int output
as
select@score=grade.分数,@credit=case
when grade.分数<60 then 0
when grade.分数>=60 then curriculum.学分
end
from curriculum join grade on curriculum.课程编号=grade.课程编号
where grade.学号=@sid and curriculum.课程名称=@cname
--执行查询
declare@score int,@credit int
exec proc_credit'0001','c语言程序设计',@score output,@credit output
select@score,@credit
(9)创建一个自定义函数maxscore,用于计算指定课程号的最高分。
答:create function maxscore(@cid char(4))
returns int
as
begin
declare@score int
select@score=max(分数)from grade where课程编号=@cid
return@score
end
print dbo.maxscore('k001')
(10)创建一个自定义函数tscore,用于计算指定学生(姓名)所读的课程编
号、课程名、分数。
答:CREATE FUNCTION tscore(@sname char(8))
RETURNS Table
AS
RETURN (SELECT b.课程编号,c.课程名称,b.分数FROM student_info a join grade b on a.
学号=b.学号
join curriculum c on b.课程编号=c.课程编号
WHERE a.姓名=@sname)
select*from dbo.tscore('刘东')
第9章存储过程与存储函数 一、选择题 1.MySQL中存储过程的建立以关键字()开始,后面仅跟存储过程的名称和参数。A.CREATE FUNCTION B.CREATE TRIGGER C.CREATE PROCEDURE D.CREATE VIEW 2.下列关于存储过程名描述错误的是()。 A.MySQL的存储过程名称不区分大小写。 B.MySQL的存储过程名称区分大小写。 C.存储过程名不能与MySQL数据库中的内置函数重名。 D.存储过程的参数名不要跟字段名一样。 3.下面声明变量正确的是()。 A.DECLARE x char(10) DEFAULT 'outer ' B.DECLARE x char DEFAULT 'outer ' C.DECLARE x char(10) DEFAULT outer D.DECLARE x DEFAULT 'outer ' 4.从tb_sutdent表中将名称为mrsoft的用户赋值给host,以下SQL语句正确的是()。A.SELECT host INTO name FROM tb_sutdent WHERE name ='mrsoft'; B.SELECT name INTO host FROM tb_sutdent WHERE name= 'LeonSK '; C.SELECT name INTO host FROM tb_sutdent WHERE name='mrsoft'; D.SELECT name INTO host FROM tb_sutdent WHERE name=‘mrsoft’; 5.光标的一般使用步骤,以下正确的是()。 A.声明光标使用光标打开光标关闭光标 B.打开光标声明光标使用光标关闭光标 C.声明光标打开光标选择光标关闭光标 D.声明光标打开光标使用光标关闭光标 6.下列控制流程语句中,MySQL存储过程不支持()。 A.WHILE B.FOR C.LOOP D.REPEAT 25
HUNAN UNIVERSITY 数据库 实验报告 学生姓名 学生学号 专业班级 指导老师 2017 年5月24日
SELECT COUNT(*)INTO more90 FROM sc WHERE cno = countcno AND grade >= 90; /*将结果存入新表sumScore中*/ create table sumScore( scorestage char(10), number smallint); insert into sumScore values('x<60', less60); insert into sumScore values('60<=x<70', b60a70); insert into sumScore values('70<=x<80', b70a80); insert into sumScore values('80<=x<90', b80a90); insert into sumScore values('x>=90', more90); END$$ call sumScore(); /*调用上述存储过程*/ 首先创建存储过程,然后再调用存储过程。结果如下: (上述结果图截自Navicat软件) 可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。 2、统计任意一门课的平均成绩。 代码如下: DELIMITER $$ CREATE PROCEDURE `scoreAvg`() BEGIN declare curname char(40) default null; /*临时存放课程名*/ declare curcno char(4) default null; /*临时存放课程号*/ declare curavg float; /*临时存放平均成绩*/ declare mycursor cursor for /*定义游标*/ select cno, cname from course;
第8章数据库编程 一、选择题 1、修改存储过程使用的语句是()。 A. ALTER PROCEDURE B. DROP PROCEDURE C. INSERT PROCEDUE D. DELETE PROCEDUE 2、创建存储过程的语句是()。 A. ALTER PROCEDURE B. DROP PROCEDURE C. CREATE PROCEDUE D. INSERT PROCEDUE 3、下面()组命令,将变量count值赋值为1。 A.DECLARE @count SELECT @count=1 B.DIM count=1 C.DECLARE count SELECT count=1 D.DIM @count SELECT @count=1 4、在SQL Server 中删除存储过程用()。 A.ROLLBACK B. DROP PROC C.DELALLOCATE D. DELETE PROC 10.在SQL Server 编程中,可使用()将多个语句捆绑。 A.{} B. BEGIN-END C.( ) D. [ ] 二、填空题 1、在T-SQL编程语句中,WHILE结构可以根据条件多次重复执行一条语句或一个语句块,还可以使用()和CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 2、存储过程是存放在()上的预先定义并编译好的T-SQL语句。 3、游标是系统为用户开设的一个(),存放SQL语句的执行结果 第9章关系查询处理和查询优化 课后作业:P275,2题答案:
1 2、事务的原子性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据库的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 3、事务的一致性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据为的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 4、事务的隔离性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据库的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 5、事务的持续性是指。 A.事务中包括的所有操作要么都做,要么都不做
实验九:T-SQL语言、存储过程及数据库的安全性 一、实验目的 1.掌握数据变量的使用; 2.掌握各种控制语句及系统函数的使用; 3.掌握存储过程的实现; 4.掌握混合模式下数据库用户帐号的建立与取消方法; 5.掌握数据库用户权限的设置方法; 6.掌握在企业管理器中进行备份、恢复操作的步骤; 二、实验学时 2学时 三、实验要求 1.了解T-SQL支持的各种基本数据类型及变量的使用; 2.了解T-SQL各种运算符、控制语句及函数的功能及使用方法; 3.掌握存储过程的编写和运行方法 4.熟悉数据库完全备份及恢复的方法; 5.了解SQL Server 2008系统安全; 6.熟悉数据库用户、服务器角色及数据库角色的用法 7.完成实验报告。 四、实验内容 以student数据库为基础数据,完成以下内容 1.变量及函数的使用: 1)创建局部变量@xh(学号)并赋值,然后输出数据表student中所有等于该值的学生的学号、姓名、性别、所属院系及年龄等信息; 2)将学号为200515008的学生的姓名赋值给变量@name; 3)计算学生信息表student中学生最高年龄和最低年龄之差,并将结果付给@cz;4)定义一函数,按系别统计当前所有学生的平均年龄,并调用该函数。 5)定义一函数,通过姓名查询某学生的学号、性别、年龄、系别、选修课程名及成绩。 2.编写并执行存储过程 ,查询以下信息:班级、学号、姓名、pr_StuScore创建一个无参存储过程(1).性别、课程名称、考试成绩。 (2)创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的选修课程及成绩信息。 (3)创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生编号和课程名称查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。
实验八存储过程的使用 一、实验目的 1、熟练掌握存储过程的定义及使用 二、实验要求 1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成 实验内容的预习准备工作; 2、能认真独立完成实验内容; 3、实验后做好实验总结,根据实验情况完成实验报告。 三、实验内容 创建图书管理库的图书、读者和借阅三个基本表的表结构: 图书表: BOOK ( BOOK_ID NUMBER(10), SORT V ARCHAR2(10), BOOK_NAME V ARCHAR2(50), WRITER V ARCHAR2(10), OUTPUT V ARCHAR2(50), PRICE NUMBER(3)); 读者表 READER ( READER_ID NUMBER(3), COMPANY V ARCHAR2(10), NAME V ARCHAR2(10), SEX V ARCHAR2(2), GRADE V ARCHAR2(10), ADDR V ARCHAR2(50)); 借阅表 BORROW ( READER_ID NUMBER(3),
BOOK_ID NUMBER(10), BORROW_DA TE DA TE); 插入数据: BOOK表: insert into book values(445501,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445502,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445503,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(332211,'TP5/10','计算机基础','李伟','高等教育出版社',18.00); insert into book values(112266,'TP3/12','FoxBASE','张三','电子工业出版社',23.60); insert into book values(665544,'TS7/21','高等数学','刘明','高等教育出版社',20.00); insert into book values(114455,'TR9/12','线性代数','孙业','北京大学出版社',20.80); insert into book values(113388,'TR7/90','大学英语','胡玲','清华大学出版社',12.50); insert into book values(446601,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446602,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446603,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(449901,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(449902,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(118801,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); insert into book values(118802,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); READER表: insert into reader values(111,'信息系','王维利','女','教授','1号楼424'); insert into reader values(112,'财会系','李立','男','副教授','2号楼316'); insert into reader values(113,'经济系','张三','男','讲师','3号楼105'); insert into reader values(114,'信息系','周华发','男','讲师','1号楼316'); insert into reader values(115,'信息系','赵正义','男','工程师','1号楼224'); insert into reader values(116,'信息系','李明','男','副教授','1号楼318'); insert into reader values(117,'计算机系','李小峰','男','助教','1号楼214'); insert into reader values(118,'计算机系','许鹏飞','男','助工','1号楼216'); insert into reader values(119,'计算机系','刘大龙','男','教授','1号楼318'); insert into reader values(120,'国际贸易','李雪','男','副教授','4号楼506'); insert into reader values(121,'国际贸易','李爽','女','讲师','4号楼510'); insert into reader values(122,'国际贸易','王纯','女','讲师','4号楼512'); insert into reader values(123,'财会系','沈小霞','女','助教','2号楼202'); insert into reader values(124,'财会系','朱海','男','讲师','2号楼210'); insert into reader values(125,'财会系','马英明','男','副教授','2号楼212'); BORROW表:
实验五存储过程和触发器的定义和使用 一、实验目的 1、掌握局部变量、全局变量、流程控制语句的使用方法 2、了解存储过程的类型和作用,并掌握使用对象资源管理器和Transact-SQL语句创建 存储过程的方法及使用方法。 3、理解触发器的特点和作用,并掌握使用Transact-SQL语言创建触发器的方法 二、实验内容 1.在学生成绩库中中有如下各表: 学生表(Student) 学号姓名性别出生日期专业所在系联系电话020101杨颖01980-7-20计算机应用计算机88297147 020102方露露01981-1-15信息管理计算机88297147 020103俞奇军11980-2-20信息管理计算机88297151 020104胡国强11980-11-7信息管理计算机88297151 020105薛冰11980-7-29水利工程水利系88297152 020201秦盈飞01981-3-10电子商务经济系88297161 020202董含静01980-9-25电子商务经济系88297062 020203陈伟11980-8-7电子商务经济系88297171 020204陈新江11980-7-20房建水利系88297171 create database学生成绩数据库 create table Student ( 学号Char(6)not null, 姓名Char(8)not null, 性别Bit not null, 出生日期smalldatetime, 专业Char(10), 所在系Char(10), 联系电话Char(11)null ) 课程表(Course) 课程号课程名教师开课学期学时学分 101计算机原理陈红2453 102计算方法王颐3453 103操作系统徐格2604 104数据库原理及应用应对刚3755 105网络基础吴江江4453 106高等数学孙中文1906 107英语陈刚1906 108VB程序设计赵红韦3705
第10章存储过程、函数和包 存储过程(PROCEDURE)、函数(FUNCTION)和包(PAKAGE)是以编译的形式存储在数据库中的数据库的对象,并成为数据库的一部分,可作为数据库的对象通过名字被调用和访问。 存储过程通常是实现一定功能的模块;函数通常用于计算,并返回计算结果;包分为包头和包体;用于捆绑存放相关的存储过程和函数,起到对模块归类打包的作用。 存储过程、函数和包是数据库应用程序开发的重要方法,三者既有区别,也有联系。 ?存储过程和存储函数。 ?过程的参数和调用。 ?包和包的应用。 10.1 存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的。 10.1.1 认识存储过程和函数 和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: ·存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。 ·存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。 ·存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL 程序)。一个重复使用的功能,可以设计成为存储过程,比如:显示一张工资统计表,可以设计成为存储过程;一个经常调用的计算,可以设计成为存储函数;根据雇员编号返回雇员的姓名,可以设计成存储函数。 ·像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。 存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。
第十一章数据库的备份 11.1 概述 数据库的备份和恢复是数据库管理员的重要职责之一。 不管数据库系统如何精心设计、配置和优化,它们都难免出现系统或硬件故障,从而引起数据库中的数据遭到破坏,当数据库中的数据遭到破坏时,数据库管理员必须尽快从数据备份中恢复数据,从而将损失减少到最小,保证用户的正常使用。数据库的备份对成功恢复数据是非常关键的,数据库管理员必须根据企业的需要,制定出良好的备份和恢复策略,并认真实施它。 11.1.1 Oracle备份的概念 数据库的备份是数据库的拷贝。当原来的数据丢失时,可以使用备份重建丢失的信息(组成Oracle数据库的物理文件)。该拷贝包括数据库的重要部分,如控制文件、存档日志和数据文件等。 备份包括物理备份和逻辑备份,物理备份是所采用的最主要的备份方式,是物理数据库文件的拷贝。如果发生物理数据库丢失或崩溃,物理备份用于保证数据库在最小的数据丢失或没有数据丢失的情况下得到恢复。它实际上进行上的是物理文件的拷贝,包含拷贝构成数据库的文件而不管其逻辑内容,进行物理备份可以采用两种方法: ?使用恢复管理器(Recovery Manager,简称RMAN)程序; ?操作系统文件备份命令,也叫做文件系统备份。Oracle 支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup)。 相应的逻辑备份用于实现数据库对象(比如数据库表或存储过程)的恢复并且它是一个全面备份策略的必要的组成部分,它通常采用Oracle的Export程序将逻辑数据导出并以二进制的方式存储。一般来说我们使用逻辑备份作为物理备份的必要补充。 11.1.2 Oracle数据库系统故障类型 不管数据库系统如何精心设计、配置和优化,它们都难免出现系统或硬件故障,语句和进程故障。这些故障大致可以分为以下几大类: 1. 介质故障 在读或写要求操作数据库的文件时可能会出现错误,这种故障就叫做介质故障,因为在读或写存储介质上的文件时会出现物理问题。一个常见的介质故障的例子是磁头的碰撞会引起磁盘驱动器上所有文件的丢失。介质故障是数据库数据的最大威胁。介质问题主要有:?磁盘磁头故障使磁盘驱动器上所有文件丢失。 ?数据文件、控制文件、联机或归档重做日志文件被意外删除、覆盖或损坏。 从介质故障中恢复的合适策略取决于受到影响的文件。介质故障是备份与恢复策略所需
实验6 存储过程与触发器 一、实验目的 1、加深与巩固对存储过程与触发器概念的理解。 2、掌握触发器的简单应用。 3、掌握存储过程的简单应用。 二、实验内容 一)存储过程: 1、创建一存储过程,求l+2+3+…+n,并打印结果。 CREATE PROCEDURE addresult AS DECLARE @n int=10,/*最后一个数*/ @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。EXEC addresult
3、修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。 CREATE PROCEDURE addresult1 @n int=10 /*最后一个数*/ AS DECLARE @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 4、调用上面修改后的addresult1存储过程,打印l+2+3+…+100的结果。 EXEC addresult1 100 5.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。
嘉应学院计算机学院 2012年 12月12日 一、实验目的 通过实验掌握SQL SERVER存储过程的基本设计方法。 二、实验原理 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合,它被编译并存储为一个单一的数据库对象,可用存储过程实现批处理。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 游标(Cursor)它使用户可逐行访问由数据库返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。基本语法: create procedure 存储过程名 (参数表 ) as t_sql语句的集合 t_sql语句除SQL语句外,还可包括声明变量,流控制语句及游标等。 (注意:t_sql语句在不同的数据库系统中,语法不同)
三、实验环境 操作系统:Windows Server 2003 、Windows 7 编译环境:SQL Server Enterprise Manager 数据库管理系统:Microsoft SQL Server 2005 四、实验步骤及内容 1. 了解T_SQL语法 (1)变量 A.局部变量 例如:declare @v_sno nvarchar(20), @v_grade float /* 声明了两个局部变量 */ B.全局变量 如:@@error, @@fetch_status C.表变量 声明表类型变量的语句将该变量初始化为一个具有指定结构的空表。 例如: declare @Mytab table (id int primary key, books varchar(15) ) insert @Mytab values(1,'9901') insert @Mytab values(2,'9902')
实验六存储过程 一、实验目的 (1)掌握T-SQL流控制语句。 (2)掌握创建存储过程的方法。 (3)掌握存储过程的执行方法。 (4)掌握存储过程的管理和维护。 二、实验内容 1、创建简单存储过程 (1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。 if exists(select*from sysobjects where name='stu_pr'and type='P') begin drop procedure stu_pr print'已删除!' end else print'不存在,可创建!' create procedure stu_pr as select distinct*from Student s left join SC on s.Sno=SC.Sno left join Course c on https://www.doczj.com/doc/5213492810.html,o=https://www.doczj.com/doc/5213492810.html,o where Classno='051'
执行: exec stu_pr 2、创建带参数的存储过程 (1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。 if exists(select*from sysobjects where name='stu_proc1'and type='P') begin drop procedure stu_proc1 print'已删除!' end else print'不存在,可创建!'
第十一章活动目录的维护 内容摘要 本章重点介绍Windows2000活动目录数据的存储过程和维护方法。重点包括: ? 活动目录数据的备份和恢复 ? 活动目录数据的优化 ? 活动目录的维护程序 考点提示 ? 活动目录的授权恢复和非授权恢复 ? 管理活动目录对象移动的程序:Movetree ? Ntdsutil.exe的应用 11.1 活动目录维护简介 造成Windows2000活动目录故障的原因很多,后果也不完全相同,如系统不能启动,不能登录,网络访问和网络验证出现故障等。当活动目录出现故障时,首先应查找可能引起故障的原因,然后根据掌握的资源情况,制定修复策略,对活动目录进行修复。 11.2 活动目录数据的维护 Windows2000活动目录将数据存储在一个事物数据库和日志文件中,对活动目录数据进行维护可以在系统出现故障时,如硬盘损坏或者软件系统崩溃而导致数据丢失时,对数据进行有效的恢复。活动目录数据维护的关键在于对活动目录数据库和日志文件进行有效的维护。 Windows2000服务器对活动目录数据提供如下的维护方法: ? 备份和恢复。使用Windows2000自带的备份工具可以对活动目录数据库进行备份和恢复。活动目录数据库在Windows2000中是整个系统数据的一部分。 ? 移动。Windows2000服务器支持将活动目录数据库从一个地方移动到另一个地方,注意移动一个活动目录数据库文件后,原文件并不会自动删除,而是继续存在,这儿的移动和复制有一些相似。 ? 碎片整理。频繁的数据库访问会造成磁盘空间利用率下降。碎片整理可以重新排列数据库中的数据,回收可以利用的磁盘空间。 11.2.1 活动目录数据的存储过程 Windows2000活动目录使用可扩展的存储引擎(ESE)对数据进行存储。ESE应用事务和日志的概念将数据存储在数据库和事务日志文件中。所谓事务(Transaction),是指系统作为一个不可分割的整体进行处理的更改、添加、删除等操作的集合。 活动目录数据存储的基本过程如下: 1、为数据库更改创建一个事务 2、向日志文件中写入事务 3、将事务写入内存缓冲区 4、将更改在系统空闲的时候写入数据库 5、更改指向日志中未写入数据库的数据项的指针。
南京信息工程大学数据库系统实验(实习)报告实验(实习)名称数据库系统实验4 实验(实习)日期2016-6-7 得分指导教师顾韵华 系计软院专业计科年级2014级班次计科 3 班姓名仇彤学号20141308071 一、实验目 1、掌握T-SQL函数及其调用方法。 2、掌握存储过程的定义及执行方法。 3、掌握有参存储过程的定义及执行方法。 4、掌握C#访问数据库的方法。 二、实验内容 1、使用系统函数(DA TEDIFF(d,date_expr1,date_expr2)),计算今天距离“2020-1-1”还剩多少天。(P299"思考与练习") 2、编写T-SQL程序,利用系统转换函数,检索总订购商品数在10~19的客户姓名。 3、定义函数RectArea,计算一个长方形的面积(长、宽作为函数的参数)。 4、在SPDG数据库中定义函数,根据商品编号,查询该商品的名称;(函数名为QryGoods)。 5、在SPDG数据库中定义存储过程GetSPBH,返回所有商品编号,并使用EXEC语句执行存储过程。 6、在SPDG数据库中定义存储过程KH_NJ_Qry,返回江苏南京的客户编号、姓名、及其订购商品的编号、商品名称和数量,并使用EXEC语句执行存储过程。 7、在SPDG数据库中定义存储过程SP_FOOD_Qry,返回食品类商品编号、商品名称及其订购客户编号、姓名、订购数量,并使用EXEC语句执行存储过程。 8、定义存储过程SP_Total,查询指定商品编号的总订购数。并执行该存储过程。 9、定义存储过程SP_TotalCost,查询指定商品编号的总订购金额。并执行该存储过程。 10、定义存储过程SP_Name_Qry,查询指定商品名称的商品信息。并执行该存储过程。 11、定义存储过程SP_Name_Qry1,查询指定商品名称的商品信息;若存在,输出1;否则,输出0。并执行该存储过程。 12、定义存储过程SP_Name_Qry2,查询指定商品名称的商品信息;若存在,用输出参数传出1;否则传出0。 三、实验过程与结果 1、使用系统函数(DATEDIFF(d,date_expr1,date_expr2)),计算今天距离“2020-1-1”还剩多少天。(P299"思考与练习") 设计的SQL语句如下: print datediff(d,getdate(),'2020-1-1') 执行结果:
实验七存储过程及应用 1.实验目的 1、理解存储过程的概念。 2、掌握存储过程的使用方法。 2.实验要求 1.建立如下的存储过程(基于前面实验建立的表和插入的数据,并为每个存储过程设计返回的状态值): (1)按要求设计完成如下功能的存储过程。 ①查询平均分数在x到y范围内的学生信息。 说明: 该存储过程有两个参数; 要求查询的学生信息包括学号、姓名、院系名称和平均分数。 ②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩。 (2)自行再分别设计一个完成查询和完成操作功能的存储过程(在实验报告中要准确描述功能需求)。 (3)在客户端以存储过程和输入SQL语句的方式分别执行相同的查询或操作,比较使用和不使用存储过程的区别。 3、实验过程 (1)①查询平均分数在x到y范围内的学生信息 create procedure cc711@x smallint,@y smallint as select学生.学号,学生.姓名,院系.名称,学生.平均成绩 from学生join院系on学生.院系=院系.编号 where学生.平均成绩between@x and@y EXECUTE cc71160,90
②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩 create procedure mcc712@xh nchar(8),@kcbh nchar(8),@cj int as update选课set成绩=@cj where学号=@xh and课程编号=@kcbh declare@pjcj int select@pjcj=AVG(成绩)from选课where学号=@xh return@pjcj declare@avg int execute@avg=mcc7122,5,98 print'更新后平均成绩:'+str(@avg,6)
第12章存储过程 12.1 存储过程概述 存储过程是一种命名PL/SQL程序块,它将一些相关的SQL语句,流程控制语句组合在一起,用于执行某些特定的操作或者任务。将经常需要执行的特定的操作写成过程,通过过程名,就可以多次调用过程,从而实现程序的模块化设计,这种方式提高了程序的效率,节省了用户的时间。 存储过程具有以下特点: ●存储过程在服务器端运行,执行速度快。 ●存储过程增强了数据库的安全性。 ●存储过程允许模块化程序设计。 ●存储过程可以提高系统性能。 12.2 存储过程的创建和调用 12.2.1 创建存储过程 1. 通过PL/SQL 语句创建存储过程 PL/SQL创建存储过程使用的语句是CREATE PROCEDURE。 语法格式: CREATE [OR REPLACE] PROCEDURE <过程名> /*定义过程名*/ [ (<参数名> <参数类型> <数据类型> [ DEFAULT <默认值>] [, …n])] /*定义参数类型及属性*/ { IS | AS } [<变量声明>] /*变量声明部分*/ BEGIN <过程体> /*PL/SQL过程体*/ END [<过程名>][;] 说明: (1)OR REPLACE:如果指定的过程已存在,则覆盖同名的存储过程。 (2)过程名:定义的存储过程的名称。 (3)参数名:存储过程的参数名必须符合有关标识符的规则,存储过程中的参数称为形式参数(简称形参),可以声明一个或多个形参,调用带参数的存储过程则应提供相应的实际参数(简称实参)。 (4)参数类型:存储过程的参数类型有IN、OUT和IN OUT 三种模式,默认的模式是IN模式。 ●IN:向存储过程传递参数,只能将实参的值传递给形参,在存储过程内部只能读不能写,对应IN模式的实参可以是常量或变量。 ●OUT:从存储过程输出参数,存储过程结束时形参的值会赋给实参,在存储过程内部可以读或写,对应OUT模式的实参必须是变量。 ●IN OUT:具有前面两种模式的特性,调用时,实参的值传递给形参,结束时,形参的值传递给实参,对应IN OUT模式的实参必须是变量。 (5)DEFAULT:指定IN参数的默认值,默认值必须是常量。 (6)过程体:包含在过程中的PL/SQL 语句。 存储过程可以带参数,也可以不带参数。 【例12.1】创建一个不带参数的存储过程spTest,输出Hello Oracle。 CREATE OR REPLACE PROCEDURE spTest /*创建不带参数的存储过程*/
第十一章项目采购管理 1.下列哪项是用于征求潜在卖方的建议书? A.采购文件 B.卖方建议书 C.需求文件 D.合作协议 2.合同比其他项目文件需要经过更多审批的原因在于: A.合同更重要 B.合同涉及双方的利益 C.合同更复杂 D.合同具有法律约束力 3.审批过程的主要目标是_____。 A.降低风险 B.将风险转移给其他人 C.确保以清晰的合同语言来描述产品、服务或成果,以便满足既定的项目需要 D.确保项目成员都能了解合同 4.在合同收尾前,经双方共同协商,我们可以根据下列哪项对合同进行修改? A.合同的变更控制条款 B.合同终止条款 C.替代争议解决 D.采购管理计划 5.作为制定进度计划的输出,项目进度计划也是下述哪项的输入? A.规划采购 B.实施采购 C.管理采购 D.结束采购 6.采购审计发生在下列哪个过程中? A.规划采购 B.实施采购 C.管理采购 D.结束采购 7.一个项目经理第一次编制采购文件,他向你请教有关采购文件的相关知识。你可以提供给他下列建议, 除了____。 A.买方拟订的采购文件应便于潜在卖方做出准确、完整的应答 B.采购文件的复杂和详细程度应与采购的价值和风险水平相适应 C.采购文件必须严格,不允许卖方提建议 D.买方拟订的采购文件要便于对卖方应答进行评价 8.供方选择标准在下列哪个过程中产生? A.规划采购 B.实施采购 C.管理采购 D.结束采购 9.有争议的变更也可被称为下列各项,除了___。 A.索赔 B.争议 C.诉求 D.问题 10.下列哪项内容描述了如何管理从制定采购文件直到合同收尾的各个采购过程? A.成本绩效基准 B.采购管理计划 C.自制或外购决策 D.采购文件
实验4创建和使用存储过程 4.1 实验目的 (1)理解存储过程的功能和特点。 (2)学会使用Transact-SQL编写存储过程的方法。 (3)学会如何使用SSMS创建存储过程。 (4)理解可以使用存储过程来完成对数据库的操作。 4.2 实验内容 (1)创建带输入参数的存储过程。 (2)执行所创建的存储过程。 (3)删除所有新创建的存储过程。 4.3.1 创建带输入参数的存储过程 在查询命令窗口中输入创建存储过程的CREATE PROCEDURE语句。 这里创建一个带输入参数的存储过程Stu_Proc1,其中的输入参数用于接收课程号,默认值为c01,然后在SC表中查询该课成绩小于70的学生学号,接着在Student表中查找这些学生的基本信息,包括学号、姓名、性别和系信息, 4.3.2 执行所创建的存储过程 在查询分析器里运行存储过程,输出运行结果。 EXECUTE Stu_Proc1 'c01'
CREATE PROCEDURE Stu_Proc2 @dept char(20) AS select student.sno, sname, https://www.doczj.com/doc/5213492810.html,o.credit from student join sc on student.sno=sc.sno join course on https://www.doczj.com/doc/5213492810.html,o=https://www.doczj.com/doc/5213492810.html,o where student.sdept=@dept 4.3.3 删除新建的存储过程 在查询命令的窗口中输入DROP PROCEDURE语句和所有新创建的存储过程名。DROP PROCEDURE Stu_Proc1
4.3.4 查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在系作为输入参数,执行此存储过程,并分别指定一些不同的输入参数值。 4.3.5 查询指定系的男生人数,其中系为输入参数,人数用输出参数返回。
实验10存储过程 一、实验目的 1. 掌握用户存储过程的创建操作。 2. 掌握用户存储过程执行操作。 3. 掌握用户存储过程的删除操作。 二、相关知识 存储过程:SQL Server 提供的一种将一些固定操作集中起来,由SQL Server 数据库服务器来完成的功能。 存储过程是机构编译和优化后存储在数据库服务器中的SQL语句,只需要调试即可使用。存储过程的优点有: 1)让服务器端能够快速执行某些SQL语句。 2)减少了服务器和客户端之间的数据流的。 3)方便实施企业规则。 4)封装后的过程对数据库保护具有一定安全性。 三、实验内容 1. 创建带输入参数的存储过程。 2. 执行所创建的存储过程。 3.删除所有新创建的存储过程。 四、实验步骤 (一) 1. 创建带输入参数的存储过程。 1)启动SQL Server Management Studio,选择要操作的数据库,如“学生选课”数据库,然后打开新建查询窗口。 2)在查询命令窗口中输入创建存储过程的CREATE PROCEDURE 语句,如图14.11.1所示: 这里,我们创建一个带输入参数的存储过程proc_xsqk1,其中的输入参数用于接收课程号,默认值为“001”,然后在“选课表”中查询该课程成绩不及格的学生学号,接着在“学生表”中查找这些学生的基本信息,包括学号、姓名、性别和联系电话信息,最后输出。 图14.11.1在查询窗口中创建存储过程 3)点击快捷工具栏上的快捷铵钮“√”,对输入的CREATE PROCEDURE 语句进行语法分析。 如果有语法错误,则进行修改,直到没有语法错误为止。 4)点击快捷工具拦上的快捷按钮“!”,执行CREATE PROCEDURE 语句。 5)查看生成的存储过程,如图14.11.2。
实验8 存储过程和触发器 1.实验目的 (1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE 创建存储过程的方法和步骤。 (2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。 (3)掌握通过SQL Server管理平台和Transact-SQL语句ALTER PROCEDURE 修改存储过程的方法。 (4)掌握通过SQL Server管理平台和Transact-SQL语句DROP PROCEDURE 删除存储过程的方法。 (5)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER 创建触发器的方法和步骤。 (6)掌握引发触发器的方法。 (7)掌握使用SQL Server管理平台或Transact-SQL语句修改和删除触发器。(8)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。2.实验内容及步骤 (1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。 CREATE PROCEDURE letters_print AS DECLARE @count int SET @count=0 WHILE @count<26 BEGIN PRINT CHAR(ASCII('a')+ @count) SET @count=@count +1 END 单击查询分析器的“执行查询”按钮,查看studentsdb数据库的存储过程是否有letters_print。 使用EXECUTE命令执行letters_print存储过程。 (2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。 CREATE PROCEDURE stu_info @name varchar(40) AS SELECT a.学号,姓名,课程编号,分数 FROM student_info a INNER JOIN grade ta ON a.学号= ta.学号 WHERE 姓名= @name 使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。 如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义? (3)使用studentsdb数据库中的student_info表、curriculum表、grade表。 ①创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、分数。