当前位置:文档之家› 实验八 数据库编程技术——游标、存储过程与触发器

实验八 数据库编程技术——游标、存储过程与触发器

实验八  数据库编程技术——游标、存储过程与触发器
实验八  数据库编程技术——游标、存储过程与触发器

实验八数据库编程技术—游标、存储过程与触发器

一、实验目的

1.掌握游标的定义和使用方法

2.掌握存储过程的定义、执行和调用方法

3.掌握游标和存储过程的综合应用方法。

4.掌握触发器的创建和使用方法。

5.掌握游标和触发器的综合应用方法。

二、实验环境(实验的软件、硬件环境)

硬件:PC机软件:SQL2000

三、实验指导说明

请复习第八章数据库编程的相关知识,完成如下的实验内容。

四、实验内容

(1)利用游标查找所有女业务员的基本情况

(2)创建一游标,逐行显示表customer的记录,要求按

‘客户编号’+‘-------’+‘客户名称’+‘-------’+‘客户地址’+‘-------------------’+‘客户电话’+‘----------’+‘客户邮编’+‘--------’格式输出,并且用while 结构来测试游标的函数@@Fetch_Status的返回值。

(3)利用游标查找orderDetail表格,汇总订单总金额并写入orderMaster表中的Ordersum的值

解一:

update ordermaster

set ordersum=0

declare @orderno int

declare @total numeric (9,2)

declare cur_orderdetail scroll cursor for

select orderno,sum(quantity*price)

from orderdetail

group by orderno

open cur_orderdetail

fetch next from cur_orderdetail into @orderno,@total while (@@fetch_status=0)

begin

update ordermaster set ordersum=@total

where orderno=@orderno

fetch next from cur_orderdetail into @orderno,@total end

close cur_orderdetail

deallocate cur_orderdetail

解二:

declare ordermaster_cur cursor for

select orderno

from ordermaster

order by orderno

declare @orderno char(12)

declare @quantity int

declare @price numeric(7,2)

open ordermaster_cur

fetch next from ordermaster_cur into @orderno

while(@@fetch_status=0)

begin

declare orderdetail_cur cursor for

select orderno,quantity,price

from orderdetail

where orderno=@orderno

order by orderno

open orderdetail_cur

fetch next from orderdetail_cur into @orderno,@quantity,@price

while(@@fetch_status=0)

begin

update ordermaster

set ordersum=@quantity*@price+ordersum

where orderno=@orderno

fetch next from orderdetail_cur into @orderno,@quantity,@price end

close orderdetail_cur

deallocate orderdetail_cur

fetch next from ordermaster_cur into @orderno

end

close ordermaster_cur

deallocate ordermaster_cur/*使用游标修改ordersum,使其计总值*/ (4)利用游标显示出orderMaster表中每一个订单所对应的明细数据信息。

(5)利用存储过程,给Employee表添加一条业务部门员工的信息。

(6)利用存储过程输出所有客户姓名、客户订购金额及其相应业务员的姓名

(7)利用存储过程查找某员工的员工编号、订单编号、销售金额。

(8)利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金额

(9)请使用游标和循环语句编写一个存储过程proSearchCustomer,根据客户编号,查询该客户的名称、地址以及所有与该客户有关的销售记录,销售记录按商品分组输出。

(10)设置一个触发器,该触发器仅允许dbo用户可以删除Employee表内数据,否则出错。

(11)在OrderMaster表中创建触发器,插入数据时要先检查Employee表中是否存在和Employee表同样值的业务员编号,如果不存在则不允许插入。

(12)级联更新:当更新customer表中的customerNo列的值时,同时更新OrderMaster表中的customerNo列的值,并且一次只能更新一行。

五、实验步骤

请完成实验内容,并写出具体的实验步骤

六、思考题:

1.存储过程和触发器,函数的区别?

七、总结(实验过程的体会、心得和实验教与学之间还需改进的内容)

游标与存储过程

实验5 游标与存储过程 1、实验目的 1. 学习实践游标与存储过程 2. 学习实践PL/SQL编程 2、实验原理 1. PL/SQL编程 2. 游标与存储过程 3、实验器材 1. 安装了Oracle,或者MySQL的计算机 4、实验内容 3. 创建表 Code Name Amt 01服装900 0101男装300 010101西装100 010102休闲装200 0102女装390 010201套装120 010202职业装130 010203休闲装140 0103童装210 02电器290 0201进口140 0202国产150 03日用品300 2.编写Oracle的存储过程,实现层次结构的逐级求和。

3.应用sql*plus,编写PL/SQL调用步骤2编写的存储过程。 五、实验报告要求 请将相应SQL语句写在实验报告上 1、 create table example(code number(10),name varchar2(20),amt number(10)); 2、 insert into example values(01,'服装',900); 3、 insert into example values(0101,'男装',300); 4、 insert into example values(010101,'西装',100); 5、 insert into example values(010102,'休闲装',200); 6、 insert into example values(0102,'女装',390); 7、 insert into example values(010201,'套装',120); 8、 insert into example values(010202,'职业装',130); 9、 insert into example values(010203,'休闲装',140); 10、 insert into example values(0103,'童装',210); 11、 insert into example values(02,'电器',290);、 12、 insert into example values(0201,'进口',140); select * from example; CODE NAME AMT --------- -------------------- ---------- 1 服装 900 101 男装 300 10101 西装 100 10102 休闲装 200 102 女装 390 10201 套装 120 10202 职业装 130 10203 休闲装 140

存储过程与触发器实验

第一章存储过程与触发器实验 实验目的 1.理解存储过程的工作原理和作用。 2.掌握存储过程设置和程序设计过程。 3.理解触发器的工作原理和作用。 4.掌握触发器编写方法。 实验环境 采用IBM DB2或Sybase数据库管理系统作为实验平台。其中,DB2可以采用DB2 Express-C或DB2 V8 Enterprise。 实验完成人:李肇臻,谢锦 实验内容 一、存储过程实验 1.针对下面2个完整性约束条件,建立存储过程,实现当数据导入或更新时,可以自动修改拥塞率、半速率话务量比例 (1)拥塞率=拥塞数量/呼叫数量 (2)半速率话务量比例=半速率话务量/全速率话务量 在DB2CMD中运行,win7用管理员权限。 create procedure M() language SQL begin update CALLDATA set "callcongs"="congsnum"/"callnum" where "congsnum"<>0 and "callnum"<>0; update CALLDATA set "rate"="thtraff"/"traff" where "thtraff"<>0 and "traff"<>0; end @ 2.将存储过程添加到数据库服务器上

3.在客户端编写调用存储过程的主程序 4.运行客户端程序,调用存储过程,观察存储过程执行过程和数据更新情况;调用就用db2 CALL M() 二、触发器实验 1. 针对下列约束条件,分别建立1个触发器: 1)每个小区/扇区最多占用14个TCH频点,合法频点范围在[1,60]之间。当向小区中新加入频点时,如果小区中现有频点数目已达到14个,则用新加入的频点替换现有频点中的最小频点;当修改或新加入频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。 create trigger first_1 after insert on FREQUENCY

存储过程和触发器(数据库实验5)

数据库基础与实践实验报告实验五存储过程和触发器 班级:惠普测试142 学号:1408090213 姓名:闫伟明 日期:2016-11-14

1 实验目的: 1)掌握SQL进行存储过程创建和调用的方法; 2)掌握SQL进行触发器定义的方法,理解触发器的工作原理; 3)掌握触发器禁用和重新启用的方法。 2 实验平台: 操作系统:Windows xp。 实验环境:SQL Server 2000以上版本。 3 实验内容与步骤 利用实验一创建的sch_id数据库完成下列实验内容。 1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。 存储过程定义代码: CREATE PROCEDURE JSXX_PROC AS SELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND https://www.doczj.com/doc/c81354505.html,o=https://www.doczj.com/doc/c81354505.html,o 存储过程执行语句与执行结果截图: EXECUTE JSXX_PROC 2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、 所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。 存储过程定义代码:

CREATE PROCEDURE XM_PROC @sname VARCHAR(100) AS BEGIN IF EXISTS(SELECT NULL FROM S WHERE sn=@sname) SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE https://www.doczj.com/doc/c81354505.html,o=https://www.doczj.com/doc/c81354505.html,o AND SC.sno=S.sno AND S.sn=@sname ELSE PRINT'无该姓名的同学。' END 运行截图: 3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业), 统计并显示该专业各年龄段男、女生人数。如果没有该专业,则显示“无此专业”。 存储过程定义代码: CREATE PROCEDURE XBNL_PROC @departName VARCHAR(30)='计算机', @begin INT, @end INT AS

数据库实验报告六_存储过程

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;

ex11游标与存储过程答案

实验十一游标与存储过程 (1)创建游标,逐行显示表Customer.的记录,并用WHILE结构来测试@@Fetch_Status的返回值。输出格式如下: '客户编号'+'-----'+'客户名称'+'----'+'客户地址'+'-----'+'客户电话 '+'------'+'客户邮编'+'------' DECLARE cur_cust SCROLL cursor FOR SELECT* FROM customer DECLARE @p_CustId char(5) DECLARE @p_CustName char(20) DECLARE @p_address char(40) DECLARE @p_Tel char(10) DECLARE @p_Zip char(6) DECLARE @p_All char(100) SELECT @p_All='客户编号'+'------'+'客户名称'+'------'+'客户地址 '+'-------------------------------------'+'客户电话'+'-------'+'客户邮 编'+'------' PRINT @p_All OPEN cur_cust FETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip WHILE(@@fetch_status<>-1) BEGIN SELECT @p_All=@p_CustId+' '+@p_CustName+@p_address+@p_Tel+' '+@p_Zip print @p_All FETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip END PRINT'客户数目: '+CONVERT(char(5),@@CURSOR_ROWS) CLOSE cur_cust DEALLOCATE cur_cust

实验六 存储过程和触发器

实验六存储过程与触发器 一、目的与要求 1.掌握编写数据库存储过程的方法。 2.掌握建立数据库触发器的方法,通过实验观察触发器的作用与触发条件设置 等相关操作。 二、实验准备 1.了解编写存储过程与调用的T-SQL语法; 2.了解触发器的作用; 3.了解编写触发器的T-SQL语法。 三、实验内容 (一)存储过程 在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号与课程名称,若院系不存在,返回提示信息。 提示:D_Info表中存储了院系代码D_ID,而St_Info表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。 1.分别执行存储过程getPractice,查询“法学院”与“材料科学与工程学院” 的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号与课程名称。 create procedure getPractice @D_Name varchar(30) output as begin if not exists (select * from D_Info where D_Name= @D_Name ) print '对不起,该院系不存在' else select st_info、St_ID,C_Info、C_No,C_Name from s_c_info inner join st_info on st_info、St_ID=s_c_info、st_id inner join C_Info on s_c_info、c_no=C_Info、C_No where st_info、St_ID in ( select St_ID from st_info join D_Info on D_Info、D_ID =left(st_info、St_ID,2) where C_Info、C_Type='实践' and D_Info、D_Name= @D_Name ) end go

sql数据库试验九:T-SQL语言存储过程及数据库的安全性

实验九: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,该存储过程根据传入的学生编号和课程名称查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。

实验16 游标、存储过程和函数参考答案

实验十六游标、存储过程和函数 一、目的与要求 1.了解游标的概念和工作原理; 2.了解存储过程的分类和使用方法; 3.了解触发器的概念; 4.学习编写和执行自定义过程; 5.学习编写和执行自定义函数; 6.学习创建和使用触发器。 二、实验准备 1.首先要了解游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。 2.使用显式游标的步骤: (1)说明游标。 (2)打开游标。 (3)读取数据。 (4)关闭游标。 3.了解PL/SQL包括3种存储过程,即过程、函数和程序包。 4.了解触发器是一种特殊的存储过程,当指定表中的数据发生变化时自动运行。 三、实验内容 1.练习书上的例子10.1—10.24。 2.以上机实验经常用到的数据库LIB为例,编写过程P_ResetPrice,此过程的功能是将表图书中指定书号的单价更改为10.0,调用该过程将书号为’TP311.13/CM3’的单价更改为10.0,将程序写在实验报告中。 create or replace procedure P_ResetPrice (vBno in varchar2) as begin update 图书 set 单价=10.0 where 图书号=vBno; end; execute P_ResetPrice(‘TP311.13/CM3’); 3.编写一函数F_GetBName,该函数的功能是在图书中根据指定的书号,返回该书的书名,并在匿名块中调用函数F_GetBName找出编号为“TP311.132/ZG1”的书名,将程序写在实验报告中。 create function F_GetName (vtno IN 图书.图书号%Type) return 图书.书名%Type

存储过程与触发器 实验报告

信息工程学院实验报告 课程名称:《数据库原理》 实验项目名称:存储过程与触发器 一、实验目的: (1)了解存储过程的概念 (2)掌握创建、执行存储过程的方法 (3)了解查看、修改和删除存储过程的方法 (4)了解触发器的概念 (5)掌握创建触发器的方法 (6)掌握查看、修改、删除触发器信息的方法 二、实验设备与器件 Win7 +Sql server 2008 三、实验内容与步骤 (一)存储过程 运行实验四附录中的SQL语句,准备实验数据。然后创建下列存储过程,并调试运行存储过程,查看运行结果。 1.在企业管理器中创建一个名为StuInfo的存储过程,完成的功能是在student表中查询系号为D2的学号、姓名、性别、年龄、系号的内容。 CREATE PROCEDURE StuInfo AS SELECT SNO AS学号, SNAME AS姓名, SSEX AS性别, SAGE AS年龄, DNO AS系号 FROM student WHERE DNO='D2' 结果: stuinfo 2.使用T_SQL语句创建存储过程,完成的功能是在表student,course和study中查询以下字段:学号、姓名、性别、课程名称、考试分数。

use mydb --查询是否已存在此存储过程,如果存在,就删除它 if exists(select name from sysobjects where name='StuScoreInfo'and type='P') drop procedure StuScoreInfo go --创建存储过程 CREATE PROCEDURE StuScoreInfo as select student.sno as学号, sname as姓名, ssex as性别, https://www.doczj.com/doc/c81354505.html,ame as课程名称, study.grade as考试分数 from student,course,study where student.sno=study.sno and https://www.doczj.com/doc/c81354505.html,o=https://www.doczj.com/doc/c81354505.html,o 结果: StuScoreInfo 3.使用T_SQL语句创建一个带有参数的存储过程stu_sno_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。 if exists(select name from sysobjects where name='stu_info'and type='P') drop procedure stu_info go --创建存储过程 create procedure stu_info @sno varchar(8) as select sno as学号, sname as姓名, ssex as性别, sage as年龄, dno as年级

实验6 数据库实验——存储过程和触发器

实验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为输出参数,让主程序能够接收计算结果。

实验五:触发器和存储过程

实验五:触发器和存储过程 一.实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。 二.实验内容: 有一个小型的图书管理数据库,包含的表为: bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表 borrowcard(cardid,ownername);--借书证表 borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表 写一个存储过程,实现借书操作,要求有事务处理。(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。(3)要求用触发器实现表的完整性控制。 三、操作与运行 1.创建图书数据库: create table bookstore (bookid int not null primary key, bookname char(20), bookauthor char(20),

purchasedate datetime, state char(4) ) create table borrowcard (cardid int not null primary key, ownername char(20) ) create table borrowlog (cardid int not null, bookid int not null, borrowdate datetime, returndate datetime, primary key(cardid,bookid), ---foreign key(cardid)references borrowcard(cardid), ---foreign key(bookid)references bookstore(bookid) ) 通过以上语句,可以看到数据库中的表建立成功。 2.创建存储过程: create proc book_borrow @mycardid_in int, @mybookid_in int, @str_out char(30) output

数据库函数、存储过程实验报告

南京信息工程大学数据库系统实验(实习)报告实验(实习)名称数据库系统实验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) 掌握存储过程的定义、执行和调用方法。 (3) 掌握游标和存储过程的综合应用方法。 2 实验内容 请完成以下实验内容: (1)创建游标,逐行显示Customer表的记录,并用WHILE结构来测试 @@Fetch_Status的返回值。输出格式如下: declare @C_no char(9),@C_name char(18),@C_phone char(10), @C_addchar(8),@C_zip char(6) declare @text char(100) declarecus_cur scroll cursor for select* from Customer select @text='=========================Customer 表的记录 =========================' print @text select @text='客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码' print @text select @text='============================================================ ============================' print @text opencus_cur fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip while(@@fetch_status=0) begin select @text=@cust_No+' '+@cust_name+' '+@addr+' '+@tel_no+' '+@zip print @text fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip end closecus_cur deallocatecus_cur '客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'

数据库原理课程设计报告报告实验创建存储过程与触发器

存储过程与触发器实验日期和时间: 2016 年 5 月13 日、星 期 五第节 实验室:DJ2-信息管理实验室 班级:学号:姓名: 实验环境: 1.硬件:笔记本电脑 2.软件:SQL Server 2012 实验原理: 存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。 触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。 假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。 以下列出参考的库表情况: 根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表) 1.★图书现有库存表。作用:记录图书的现有库存情况。至少包括:书号、书名、 作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库 存总量、库存位置等。 2.★读者信息表。作用:记录读者信息。至少包括:读者编号、证件类型、证件号 码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地址、 联系电话等。 3.★借书记录表。作用:记录借书情况,以及是否归还。至少包括:借阅ID(主键, 可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、管理员 编号……等。 4.★还书记录表。作用:记录还书情况。至少包括:还书ID(主键,可设置为自动 编号)、书号、读者编号、归还数量、归还日期、是否超期(超过假设45天为超 期)、超期天数、管理员编号……等。(附:为简化操作,续借可视为归还后再借)。 5.管理员信息表。作用:记录负责管理书库和借书还书工作的管理员信息。至少包 括:管理员编号、职工编号(在职工档案表中的职工编号)、用户名、密码、管理

实验七 存储过程及应用完整版含截图

实验七存储过程及应用 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)

SQL游标嵌套存储过程

--测试数据 create table tmp1 ( ID int not null, val varchar(10), constraint PK_tmp1 primary key (ID) ); create table tmp2 ( ID int not null, vals varchar(100), constraint PK_tmp2 primary key (ID) ); insert into tmp1(id, val) values (1, 'test'); insert into tmp1(id, val) values (2, 'test2'); insert into tmp1(id, val) values (3, 'test3'); insert into tmp1(id, val) values (4, 'test4'); insert into tmp1(id, val) values (5, 'test5'); insert into tmp2(id, vals) values (1, '1,2'); insert into tmp2(id, vals) values (2, '1,3'); insert into tmp2(id, vals) values (3, '2,5'); insert into tmp2(id, vals) values (4, '1,2,3,4,5'); --存储过程 drop procedure proc_tmp_1 go CREATE PROCEDURE proc_tmp_1 AS begin declare @vals varchar(500) declare @id int declare @vals2 varchar(1000) declare @command varchar(1000) declare @vals3 varchar(1000) declare @cmd varchar(1000) declare cursor_tmp_1 cursor for SELECT id, vals FROM tmp2 open cursor_tmp_1 fetch next from cursor_tmp_1 into @id, @vals while @@fetch_status = 0 begin set @vals3 = '' set@cmd = 'declare cursor_tmp_2 cursor for select val from tmp1 where id in (' + @vals + ')' EXEC (@cmd) open cursor_tmp_2 fetch next from cursor_tmp_2 into @vals2 while @@fetch_status = 0 begin if (@vals3 <> '') begin set @vals3 = @vals3 + ',' end SET @vals3 = @vals3 + @vals2

数据库存储过程与触发器实验报告

南昌航空大学实验报告 二00 年月日 课程名称:数据库概论实验名称:数据库存储过程与触发器 班级:122031 姓名:同组人: 指导教师评定:签名: 一、实验环境 1.Windows2000或以上版本; 2.SQLServer 2005。 二、实验目的 熟悉不同数据库的存储过程和触发器,重点实践SQL Server2005,掌握SQL Server2005中有存储过程与触发器的相关知识。 三、实验要求 完成实验指导书中p115-7和p132 -4。 四、实验步骤及参考源代码 1.创建与执行存储过程 create procedure C_P_Proc as select distinct https://www.doczj.com/doc/c81354505.html,o,cna,pna,num from paper,customer,cp where https://www.doczj.com/doc/c81354505.html,o=https://www.doczj.com/doc/c81354505.html,o and paper.pno=cp.pno and cna='李涛' or cna='钱金浩' go execute C_P_Proc 2.删除存储过程 drop procedure C_P_Proc 3.创建插入触发器 create trigger TR_PAPER_I ON PAKER12203125 FOR INSERT AS DECLARE @appr float DECLARE @apno int SELECT @appr=ppr,@apno=pno from inserted begin if @appr<0 or @appr is null begin

raiserror('报纸的单价为空或小于!',16,1) update paper set ppr=10 where paper.pno=@apno end end 4.创建删除触发器 create Trigger TR_PAPER_D on PAKER12203125 after delete as declare @ipno char(6) declare @icount int; select @icount= count(*) from deleted,cp where deleted.pno=cp.pno if @icount>=1 begin select @ipno=pno from deleted raiserror('级联删除cp表中的数据',16,1) delete from cp where cp.pno=@ipno end 5.创建修改触发器 create trigger TR_PAPER_U ON PAKER12203125 for update as declare @ippr float select @ippr=ppr from inserted if @ippr<0 or @ippr is null begin raiserror('输入单价不正确',16,1) rollback transaction end 6. 分别对PAKER12203125表进行插入、修改、删除操作 insert into PAKER12203125 (pno,pna,ppr)values('000006','江西日报','1') insert into PAKER12203125 (pno,pna,ppr)values('000007','江南都市报','15.5') delete from PAKER12203125 where pno='000001' update PAKER12203125 set ppr=12.5 where pno='000002' update PAKER12203125 set ppr=-2 where pno='000004' 五、实验结果

数据库实验10存储过程

实验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。

第6章_存储过程与触发器练习题

有教师表(教师号,教师名,职称,基本工资),其中基本工资的取值与教师职称有关。实现这个约束的可行方案是( )。 A 在教师表上定义一个视图 B 在教师表上定义一个存储过程 C 在教师表上定义插入和修改操作的触发器 D 在教师表上定义一个标量函数 参考答案 C 在SQL SERVER中,执行带参数的过程,正确的方法为()。 A 过程名参数 B 过程名(参数) C 过程名=参数 D ABC均可 参考答案 A 在SQL SERVER服务器上,存储过程是一组预先定义并()的Transact-SQL语句。 A 保存 B 解释 C 编译 D 编写 参考答案 C 在SQL Server中,触发器不具有()类型。 A INSERT触发器 B UPDATE触发器 C DELETE触发器 D SELECT触发器 参考答案 D

()允许用户定义一组操作,这些操作通过对指定的表进行删除、插入和更新命令来执行或触发。 A 存储过程 B 规则 C 触发器 D 索引 参考答案 C 为了使用输出参数,需要在CREATE PROCEDURE语句中指定关键字( )。 A OPTION B OUTPUT C CHECK D DEFAULT 参考答案 B 下列( )语句用于创建触发器。 A CREATE PROCEDURE B CREATE TRIGGER C ALTER TRIGGER D DROP TRIGGER 参考答案 B 下列( )语句用于删除触发器。 A CREATE PROCEDURE B CREATE TRIGGER C ALTER TRIGGER D DROP TRIGGER 参考答案 D

相关主题
相关文档 最新文档