实验六管理存储过程11页word
实训六存储过程
实训六:存储过程1.实训目的1)通过对常用系统存储过程的使用,了解存储过程的类型;2)通过创建和执行存储过程,了解存储过程的基本概念,掌握使用存储过程的操作技巧和方法;3)通过对已创建的存储过程的改变,掌握修改存储过程的操作技巧和方法;2.实训工具SQL Server2005SQL Server Management Studio。
3 实训内容(保存操作过程程序设计语句和结果)1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。
2、在学生库中创建存储过程proc_8_t1,要求实现如下功能:产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、学分、学号、姓名、系别、性别等。
并调用此存储过程,显示执行结果。
3、在学生库中创建存储过程proc_8_t2,要求实现如下功能:输入系号,产生该系学生的选课情况列表,其中包括系号、学号、姓名、课程号、课程名、成绩、学分等。
并调用此存储过程,显示信息系号为‘20’的所有学生的选课情况列表。
4、在学生库中创建存储过程proc_8_t3,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生学分不足!”,否则显示“此学生学分已足!”。
并调用此存储过程,显示“1002”学生的总学分情况。
对学生库中已创建的存储过程proc_8_t1进行修改,要求在显示列表中增加教师字段,即产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、授课教师号(TNO)、学分、学号、姓名、系别、专业、性别等。
5、对学生库中已创建的存储过程proc_8_t2进行修改,要求实现如下功能:输入课程名称,产生选修该课程所有男生的选课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、学分等。
并调用修改后的存储过程,显示选修“离散数学”男生的选课情况列表。
6、对学生成绩库中已创建的存储过程proc_8_t3进行修改,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生所选总学分为XXX,学分不足!”,否则显示“此学生所选总学分为XXX,学分已足!”。
实验六 MySql存储过程
实验六MySql存储过程一、实验目的1、熟悉MySql的存储过程二、实验内容1、建立一张学生表,属性有学号、姓名、年龄三个字段。
2、建立一个存储过程,实现学生的全查询3、分别用IN 和OUT实现姓名的调用4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。
5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.6、建立一个存储过程,做一个循环语句,循环插入5个学生。
(至少用三种循环的存储过程方法)三、试验结果截图1.建立一张学生表,属性有学号、姓名、年龄三个字段。
2.建立一个存储过程,实现学生的全查询3.分别用IN 和OUT实现姓名的调用4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。
5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.6建立一个存储过程,做一个循环语句,循环插入5个学生。
(至少用三种循环的存储过程方法)所有代码:1.create table stu(stuno int,stuna varchar(20),stuage int);insert into stu values(001,'zhangsan',22);insert into stu values(002,'lisi',23);insert into stu values(003,'wangwu',23);insert into stu values(004,'maliu',24);insert into stu values(005,'zhaoqi',25);insert into stu values(006,'gaoba',23);insert into stu values(007,'ddddd',22);insert into stu values(008,'ttttt',21);2.create procedure select_all()select * from stu;3.delimiter //create procedure searchno(in no int,out na varchar(20),out age int)beginselect stuna from stu where stuno=no into na;select stuage from stu where stuno=no into age; end //delimiter ;call searchno(n,@na,@age);select @na,@age;4.delimiter //create procedure noupdate(in n int)beginupdate stu set stuno=stuno+n;end //delimiter ;5.delimiter //create procedure addstu(in sno int)begincase snowhen 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20);end case;end //delimiter ;6.(1).delimiter //create procedure add5stu1()begindeclare num1 int;set num1=0;loop_label:loopinsert into stu values (111,'111',20);set num1=num1+1;if num1>=5 then leave loop_label;end if;end loop;end //delimiter ;(2).delimiter //create procedure add5stu2()begindeclare num2 int;set num2=0;while num2<5 doinsert into stu values (222,'222',20);set num2=num2+1;end while;end //delimiter ;(3).delimiter //create procedure add5stu3()begindeclare num3 int;set num3=0;repeatinsert into stu values (333,'333',20);set num3=num3+1;until num3>=5end repeat;end //delimiter ;四、实验小结本次试验让我好好补习了下前段时间落下的课程,让我对数据库有了新的体会和认识,试验中碰到了一些问题,但都已解决和理解。
网络数据库实验六存储过程
实验:存储过程实验学时:2个学时实验类型:(验证、综合、设计)一、内容概述:1、存储过程简介存储过程是存储于数据库中的一组T-SQL语句。
有了存储过程之后,与数据库的交互就没有必要在程序中写一堆的SQL语句,而只需用一条语句调用适当的存储过程来完成就可以了。
另外,由于代码是存储在数据库中,我们也可以在不同的应用程序或查询窗口中不断的重复利用那些代码。
存储过程功能的优点①预编译执行程序。
SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划。
这个特点通过重复调用存储程序极大地提高了程序的性能。
②缩短客户端/服务器之间的信息传输量。
如果你的工作环境带宽有限,那么存储过程技术肯定能够满足你,因为它能够把需要传输的长的SQL查询缩短成一行。
③有效重复使用代码和编程。
存储过程可以为多个用户所使用,也可以用于多个客户程序。
这样可以减少程序开发周期的时间。
④增强安全性控制。
可以允许用户单独执行存储过程,而不给于其访问表格的权限。
2、创建存储过程语法CREATE PROC[ EDURE ] [ owner. ] procedure_name [ ; number ][ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ][ WITH{ RECOMPILE | ENC RYPTION | RECOMPILE , ENC RYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]示例:AjaxCity表ID CityName Short1 苏州市SZ2 无锡市WX3 常州市CZ⑴.选择表中所有内容并返回一个数据集CREATE PROCEDURE mysp_AllASselect * from AjaxCityGO执行结果⑵.根据传入的参数进行查询并返回一个数据集CREATE PROCEDURE mysp_para@CityName varchar(255),@Short varchar(255)ASselect * from AjaxCity where CityName=@CityName And Short=@ShortGO执行结果⑶.带有输出参数的存储过程(返回前两条记录的ID的和)CREATE PROCEDURE mysp_output@SUM int outputASselect @SUM=sum([ID]) from (select top 2 * from AjaxCity) as tmpTable GO执行结果二、实验报告实验报告课程名称网络数据库SQL Server2005实验名称存储过程实验时间________年____月____日成绩一、实验目的1、熟悉存储过程基本概念和类型。
存储过程的使用 实验报告
USEypp7
--声明四个变量,用于保存输入和输出参数
DECLARE@KECHENGMINGvarchar(20)
DECLARE@AVGCHENGJI1tinyint
DECLARE@MAXCHENGJI1tinyint
DECLARE@MINCHENGJI1tinyint
--为输入参数赋值
SELECT@KECHENGMING='高等数学'
--声明四个变量,用于保存输入和输出参数
DECLARE@KECHENGMINGvarchar(20)
DECLARE@AVGCHENGJI1tinyint
DECLARE@MAXCHENGJI1tinyint
DECLARE@MINCHENGJI1tinyint
--为输入参数赋值
SELECT@KECHENGMING='计算机基础'
1.使用if exists语句,如果存储过程“单科成绩分析”存在,就将其删除;
2.使用create proc语句创建存储过程;
3.定义所需要的输入参数和输出参数;
4.声明4个变量来保存输入和输出参数;
5.执行存储过程并显示结果。
同时,值得注意的是,在创建存储过程时,应该注意一些细节,如单词的拼写要准确无误,程序中用的是单引号而不是双引号等等。
--执行存储过程
EXEC单科成绩分析@KECHENGMING,
@AVGCHENGJI1OUTPUT,
@MAXCHENGJI1OUTPUT,
@MINCHENGJI1OUTPUT
--显示结果
SELECT@KECHENGMINGAS课程名,@AVGCHENGJI1AS平均成绩,@MAXCHENGJI1AS最高成绩,
实验六-存储过程与触发器
实验六存储过程和触发器1.实验目的(1) 掌握存储过程和触发器的基本概念和功能(2) 掌握创建,管理存储过程的方法(3) 掌握创建,管理触发器的方法2.实验内容及步骤(1) 利用SQL Server Management Studio创建一个存储过程ProcNum,查询每个班级中学生的人数,按班级号升序排序.在查询编辑器的存储过程模板中输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcNum ASSELECT classno,COUNT(*)AS number FROM studentGROUP BY classno ORDER BY classno ASCGOEXEC ProcNum(2) 利用Transact-SQL语句创建一个带有参数的存储过程ProcInsert,向score 表插入一条选课记录,并查询该学生的姓名,选课的所有课程名称,平时成绩和期末成绩.<1> 在查询编辑器输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))ASINSERT INTO score VALUES (@sno,@cno,@usually,@final)SELECT sname,cname,usually,finalFROM student s,course c,score scWHERE s.studentno=sc.studentno and c.courseno=sc.courseno and s.studentno=@sno<2> 调用存储过程ProcInsert,向score表插入一条选课记录.DECLARE@AVERAGE NUMERIC(6,2)EXEC ProcInsert'16135222201','c05103',88,90(3) 利用Transact-SQL语句创建一个存储过程ProcAvg,查询指定班级指定课程的平均分。
存储管理实验报告_6
昆明理工大学信息工程与自动化学院学生实验报告(2012 —2013 学年第二学期)一、实验目的存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
通过本次实验, 要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解, 通过请求页式存储管理中页面置换算法模拟设计, 了解虚拟存储技术的特点, 掌握请求页式存储管理的页面置换算法。
二、实验原理及基本技术路线图(方框原理图)用C或C++语言模拟实现请求式分页管理。
要求实现: 页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。
int subareaSize[num]={8,12,16,32,24,16,64,128,40,64};//分区大小Process *pro=NULL;//保持进程信息int ProcessNum=0;//进程数目int applyProcessNum=0;//每次申请进程数目int maxApplyNum=0;//最大可申请数目int *applyIndex=NULL;//申请进程队列int totalApplyNum=0;//申请总数int *assignPointer=NULL;//已分配内存的进程队列int assignFlag=0;//分配索引, 表示已申请队列已分配的进程数int exeIndex;//执行的进程号Node *subareaNode=new Node[3];//分区回收时, 进程所在分区及其前, 后分区信息LinkList createLinkList(int n );//建立空闲分区链Node firstFit(LinkList &head,Process pro);//首次适应算法Node nestFit(LinkList &head,Process pro,Node flag);//循环适应算法Node bestFit(LinkList &head,Process pro);//最佳适应算法Node worstFit(LinkList &head,Process pro);//最坏适应算法Node assign(LinkList &head,int orderIndex,int index,Node flagNode);//一次分区分配int assignMemory(LinkList &head);//内存分配void insertNode(LinkList &head,Node q,int index);//插入节点Node deleteNode(LinkList &head,int index);//删除节点int display(LinkList &head);//打印分区分配情况int lowAttemper(int *excursionPointer);//低级调度int findSubarea(LinkList &head,int index);//回收内存int creatProcess();//创建进程Process* randomCreatPro(int n);//随机产生进程下面是各种方法简述:(1) 最优替换算法, 即OPT算法。
存储过程操作实验报告
一、实验模块数据库原理与应用二、实验标题存储过程操作实验三、实验内容1. 实验目的(1)掌握存储过程的概念和作用。
(2)学会创建和使用存储过程。
(3)了解存储过程与触发器的区别。
2. 实验原理存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中供应用程序调用。
它可以提高数据库性能,简化代码编写,提高安全性。
3. 实验步骤(1)创建数据库```sqlCREATE DATABASE IF NOT EXISTS experiment;USE experiment;```(2)创建表```sqlCREATE TABLE IF NOT EXISTS employee (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,department_id INT);CREATE TABLE IF NOT EXISTS department (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50));```(3)插入数据```sqlINSERT INTO employee (name, age, department_id) VALUES ('张三', 25, 1),('李四', 30, 2),('王五', 28, 3);INSERT INTO department (name) VALUES ('技术部'),('业务部'),('售后部');```(4)创建存储过程```sqlDELIMITER //CREATE PROCEDURE get_department_name(IN emp_id INT, OUT dept_name VARCHAR(50))BEGINSELECT INTO dept_name FROM employee e INNER JOIN department d ON e.department_id = d.id WHERE e.id = emp_id;END //DELIMITER ;```(5)调用存储过程```sqlCALL get_department_name(1, @dept_name);SELECT @dept_name AS department_name;```(6)创建触发器```sqlDELIMITER //CREATE TRIGGER before_employee_insertBEFORE INSERT ON employeeFOR EACH ROWBEGINIF NEW.age < 20 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄不能小于20岁'; END IF;END //DELIMITER ;```(7)尝试插入年龄小于20岁的数据```sqlINSERT INTO employee (name, age, department_id) VALUES ('赵六', 18, 1);```4. 实验结果与分析(1)成功创建存储过程和触发器。
存储过程实验报告
存储过程实验报告一、实验目的本次实验旨在深入了解和掌握存储过程的基本概念、功能及其在数据库管理中的应用。
通过实际操作和实践,提高对存储过程的编写、调试和优化能力,为今后在数据库相关项目中的高效开发和应用奠定坚实的基础。
二、实验环境本次实验使用的数据库管理系统为 MySQL 80,操作系统为Windows 10。
开发工具使用了 MySQL Workbench 80。
三、实验内容(一)创建简单的存储过程创建一个存储过程,用于计算两个整数的和。
以下是创建存储过程的代码:```sqlDELIMITER //CREATE PROCEDURE add_numbers(IN num1 INT, IN num2 INT, OUT sum INT)BEGINSET sum = num1 + num2;END //DELIMITER ;```(二)调用存储过程使用以下代码调用上述创建的存储过程:```sqlCALL add_numbers(5, 10, @result);SELECT @result;```(三)带有条件判断的存储过程创建一个存储过程,根据传入的学生成绩判断其等级。
如果成绩大于等于 90 为“优秀”,大于等于 80 小于 90 为“良好”,大于等于 60 小于80 为“及格”,小于 60 为“不及格”。
以下是存储过程的代码:```sqlDELIMITER //CREATE PROCEDURE grade_judge(IN score INT, OUT grade VARCHAR(10))BEGINIF score >= 90 THENSET grade ='优秀';ELSEIF score >= 80 AND score < 90 THEN SET grade ='良好';ELSEIF score >= 60 AND score < 80 THEN SET grade ='及格';ELSESET grade ='不及格';END IF;END //DELIMITER ;```调用该存储过程的代码如下:```sqlCALL grade_judge(85, @result_grade);SELECT @result_grade;```(四)带有循环的存储过程创建一个存储过程,计算 1 到 100 的整数之和。
实验6存储过程的应用-实验报告
图三、返回指定课程的平均成绩成功
4.执行系统存储过程sp_help查看存储过程2的一般信息
代码及结果如下:
图四、查看存储过程2的一般信息
5.执行系统存储过程sp_helptext查看存储过程2的定义
实验内容:
本次实验之前的实验中我已经创建了mydb数据库,因此本次实验我不再提及mydb数据库的创建过程,接下来我们进入实验。
1.创建存储过程:查找1985年以后出生的学生的信息,代码及结果如下
:
图一、创建存储过程成功
2.用T-SQL语句在表department中创建插入的存储过程
代码及结果如下:
图二、创建插入的存储过程
1.创建存储过程:查找1985年以后出生的学生的信息
2.用T-SQL语句在表department中创建插入的存储过程
3.用T-SQL语句创建存储过程:要求返回指定课程的平均成绩,其中指定课程号以存储过程的输入参数进行传递。
4.执行系统存储过程sp_heቤተ መጻሕፍቲ ባይዱp查看存储过程2的一般信息
5.执行系统存储过程sp_helptext查看存储过程2的定义
《数据库系统应用设计》实验报告(六)
班级:08计科(2)班
姓名:杨进林
学号:08410902049
时间:2011-5-15
地点:综合实验楼二楼
实验成绩:优秀□良好□中□及格□不及格□
实验题目:1、存储过程的应用
实验目的:1、掌握创建存储过程的方法。
2、掌握存储过程的使用
实验要求:
在mydb数据库中:
代码及结果如下:
实验六 存储过程创建与应用
实验六存储过程创建与应用一、实验目的使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。
二、实验内容(1)创建存储过程student_grade,要求实现如下功能:查询“学生-课程”数据库中每个学生各门功课的成绩,其中包括每个学生的sno,sname,cname,grade。
(2)利用查询分析器创建名为proc_exp的存储过程,要求实现如下功能:从sc表中查询某一学生考试平均成绩。
(3)修改存储过程proc_exp,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格,成绩为XX分”,否则显示“此学生总和成绩不合格,成绩为XX分”。
(4)创建名为proc_add的存储过程,要求实现如下功能:向sc表中添加学生成绩记录。
调用proc_add,向sc表中添加学生成绩记录。
(5)调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格。
(6)删除刚刚创建的proc_add和proc_exp两个存储过程。
三、实验过程(1)创建存储过程student_grade:查询每个学生各门功课的成绩(部分查询结果):(2)创建存储过程proc_exp:查询某一学生考试平均成绩(部分结果):(3)修改存储过程proc_exp调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格(4)创建名为proc_add的存储过程:添加学生记录:(5)删除刚刚创建的proc_add和proc_exp两个存储过程。
四、实验总结在创建proc_exp存储过程时,需要添加group by语句对结果进行分组,不然会出现错误。
当调用存储过程proc_exp,输入学号查询学生综合成绩是否合格时,出现错误:“Conversion failed when converting the varchar value '77.500000' to data type int.”看到该错误时自己清楚是数据类型不匹配导致,经过仔细分析之后终于明白是自己更改pro_exp存储结构中的if @avg>=60语句不正确,因为在创建表的时候,定义的学生成绩的数据类型为decimal(5,2),即最大5位数字,其中2位小数,定义的变量avg类型为varchar(20),在将该语句修改为if @avg>=60.00后,查询成功。
整理实验六-存储过程和触发器
实验六存储过程和触发器整理表姓名:职业工种:申请级别:受理机构:填报日期:A4打印/ 修订/ 内容可编辑《大型数据库》课程教学大纲课程简介Microsoft SQL Server 2000是一个客户机/服务器关系型数据库系统,它使用Transact-SQL语言在客户机与SQL Server数据库服务器之间发送请求。
SQL Server 2000是Microsoft 公司推出的一个全新的数据库服务器产品,是一个企业级的网络关系型数据库管理系统,该产品拥有的种种新特性使它成为数据库服务器产品中的佼佼者,并且越来越得到广大用户的青睐。
SQL SERVER2000推出后广受欢迎.它使用了最先进的数据库构架,与windowsNT/2000平台紧密集成,具有完全的WEB功能,人们用它可方便地管理数据库和开发应用程序.它通过对高端硬件平台,网络和存储技术的支持,能在INTERNET商业领域快速建立应用.此外,还增强了安全性,支持基于角色的安全并拥有安全审计工具。
如果作为一般的程序应用,SQL SERVER2000是非常方便的,但要作为系统管理员,要掌握这样一个复杂而庞大的系统管理,需要进行大量的学习与实践.本课程在学生已初步掌握SQL SERVER 数据库对象的基础上,重点介绍SQL SERVER这一大型数据库的系统管理,为以后从事有关方面的工作打下良好的基础。
课程大纲一、课程的性质和任务:本课程作为计算机科学与技术的专业课程,主要任务是讲授如何使用SQL Server 2000 进行程序设计以及对数据库进行适当地管理。
通过理论指导和上机实践相结合的方式,使学生能熟练使用Transact-SQL语言并能进行简单编程;掌握保证数据完整性和数据安全性的技术;掌握数据库常规管理技术;了解客户端开发工具与大型数据库(SQL SERVER 2000)配合开发数据库应用系统的关键技术。
二、课程的目的与基本要求:1.了解SQL Server 2000的特点、组成等。
大型数据库 实验6 存储过程
一.实验内容1)创建并执行不带参数的存储过程①针对项目表创建名为“P1_存储过程”的存储过程,要求显示所有记录。
②执行“P1_存储过程”存储过程进行数据浏览。
2)创建并执行带输入参数的存储过程①部门人数应该等于员工表中对应部门实际员工数,由于有员工调入调出,可能存在不等的情况。
编写存储过程“P2_存储过程”,检查指定部门人数的正确性,如果不正确,则进行修改。
②显示部门表和员工表数据;然后执行存储过程;再显示部门表和员工表数据,比较数据是否变化。
3)创建带OUTPUT输出参数的存储过程①设计存储过程“P3_存储过程”,从员工表计算某部门人员平均工资。
要求输入参数为部门号,输出参数是该部门的平均工资。
②编写主程序,调用存储过程,在主程序中显示指定部门的平均工资。
4)创建并执行带输入参数和返回状态的存储过程①设计存储过程“P4_存储过程”,完成对员工表的元组插入工作。
要求使用输入参数。
插入操作成功返出状态值0,失败返出状态值-1。
②执行存储过程,如果返回状态值为0,输出“数据插入成功”,否则输出“数据插入失败”。
5)修改和删除存储过程①修改“P1_存储过程”存储过程,要求指定项目编号作为输入参数,并增加WITH ENCRYPTION 选项。
②查看修改后的“P1_存储过程”存储过程文本。
③执行“P1_存储过程”存储过程④删除“P1_存储过程”存储过程。
二.测试数据与实验结果1、创建并执行不带参数的存储过程a、针对项目表创建名为“P1_存储过程”的存储过程,显示所有记录,代码如下:create procedure P1_存储过程asselect*from项目表b、执行“P1_存储过程”存储过程进行数据浏览,结果如下:2、创建并执行带输入参数的存储过程a、编写存储过程“P2_存储过程”,其中利用游标逐行检查部门人数是否和在员工表中的数据相符合,如果不符合,则利用游标进行定位修改,代码如下:create procedure P2_存储过程asdeclare@部门号char(6),@部门人数intdeclare@n intdeclare部门表_cursor cursor forselect部门号,部门人数from部门表for update of部门人数open部门表_cursorfetch next from部门表_cursor into@部门号,@部门人数while@@FETCH_STATUS=0beginselect@部门号,@部门人数select@n=COUNT(员工号)from员工表where所在部门号=@部门号update部门表set部门人数=@nwhere current of部门表_cursorfetch next from部门表_cursor into@部门号,@部门人数endclose部门表_cursordeallocate部门表_cursor执行存储过程,代码如下:exec P2_存储过程b、显示部门表和员工表数据,然后执行存储过程,可以看出,在执行存储过程之前,“办公室”的人数和员工表中的人数是不相符的,在执行存储过程之后,部门人数成功更新,如下图所示:图1 员工表中的数据图2执行“P2_存储过程”之前的部门表数据图3 执行“P2_存储过程”之后的部门表数据3、创建带OUTPUT输出参数的存储过程a、设计存储过程“P3_存储过程”,从员工表计算某部门人员平均工资,输入参数为部门号,输出参数是该部门的平均工资,创建的过程如下:create procedure P3_存储过程(@部门号char(10),@部门平均工资float output)asselect@部门平均工资=AVG(工资)from员工表where所在部门号=@部门号c、执行的代码和运行结果如下:declare@部门平均工资floatexec P3_存储过程'1011',@部门平均工资outputselect'部门平均工资'=@部门平均工资4、创建并执行带输入参数和返回状态的存储过程a、设计存储过程“P4_存储过程”,完成对员工表的元组插入工作,存储过程的创建代码如下:create procedure P4_存储过程(@员工号char(4),@姓名varchar(20),@性别char(2),@出生年月varchar(60),@技术职称char(10),@工资int,@所在部门号char(6),@参加的项目总数int)asbegin transactioninsert into员工表values(@员工号,@姓名,@性别,cast(@出生年月as datetime),@技术职称,@工资,@所在部门号,@参加的项目总数)if@@error<>0beginrollback transactionreturn-1endelsebegincommit transactionreturn 0endb、执行存储过程,代码如下:此存储过程的返回值是-1或者0,所以可以将返回值赋给变量@statusdeclare@status intexec@status=P4_存储过程'2015','钱六','男','1988-03-15','工程师',2700,'10101','1'if@status=0print'插入成功'elseprint'插入失败'c、执行结果如下:图1 显示插入成功图2 在“员工表”中查看5、修改和删除存储过程a、修改“P1_存储过程”存储过程,要求指定项目编号作为输入参数,并增加WITH ENCRYPTION:alter procedure P1_存储过程(@项目编号char(5))with encryptionasselect*from项目表b、执行存储过程如下:exec P1_存储过程'J1111'c、查看存储过程如下:d、删除存储过程成功,如下图:drop proc P1_存储过程三.实验总结本实验使我学会了在SQL Server 2008中创建存储过程和执行存储过程,现在还不熟悉,希望以后可以通过练习掌握的更好。
存储过程_精品文档
存储过程存储过程是一种在关系型数据库系统中执行预定义操作的机制。
它是一组被捆绑在一起的SQL语句,被作为一个单元来执行。
存储过程可以接受输入参数,可以返回结果集或输出参数。
它们可被多次调用,提供了一种有效地复用数据库逻辑的方式。
在许多应用程序中,存储过程被广泛使用。
它们可以用于处理复杂的数据操作、业务逻辑和数据验证。
存储过程还可以提供更高的性能和安全性,因为它们将SQL语句保存在数据库服务器上,并可以被多个客户端应用程序共享和重用。
为什么使用存储过程?有以下几个好处:1. 提高性能:存储过程在数据库服务器上执行,因此可以避免网络延迟,并且可以最小化与数据库之间的通信。
这种本地执行可以提高性能,尤其是当存储过程涉及复杂的数据操作时。
2. 降低网络流量:存储过程将一组SQL语句捆绑在一起,并作为一个单独的操作发送到数据库服务器。
这样可以减少需要通过网络传输的数据量,从而减少了网络流量。
3. 简化复杂的操作:存储过程可以将多个SQL语句合并为一个单元,从而简化了复杂的数据库操作。
这使得开发人员可以在一个地方定义和管理逻辑,而不需要在每个应用程序中重复编写相同的代码。
4. 提高安全性:通过使用存储过程,可以限制对数据库的直接访问,并可以通过访问控制权限来保护数据。
存储过程还可以防止SQL注入攻击和其他安全漏洞。
5. 促进团队合作:存储过程将数据库逻辑与应用程序逻辑分离,使开发团队可以并行开发,而不会相互干扰。
这种分离还可以提高代码的可维护性和可重用性。
在设计和创建存储过程时,需要考虑以下几个方面:1. 功能需求:首先需要确定存储过程的功能和目标。
这可能涉及到处理数据的逻辑、执行特定的业务规则或验证数据。
根据这些需求,可以编写相应的SQL语句,并将其组合成存储过程。
2. 输入参数:存储过程可以接受输入参数,以便接收外部数据,并根据这些参数执行相应的操作。
输入参数可以是任意数据类型,并可以有默认值。
使用输入参数可以实现灵活的数据操作和业务逻辑。
实验6 数据库实验——存储过程和触发器
实验6 存储过程和触发器一、实验目的1、加深和巩固对存储过程和触发器概念的理解。
2、掌握触发器的简单应用。
3、掌握存储过程的简单应用。
二、实验内容一)存储过程:1. 创建一存储过程,求l+2+3+…+n,并打印结果。
CREATE PROCEDURE addresultASDECLARE @n int=10,/*最后一个数*/@i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。
EXEC addresult3. 修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。
CREATE PROCEDURE addresult1@n int=10 /*最后一个数*/ASDECLARE @i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO4. 调用上面修改后的addresult1存储过程,打印l+2+3+ (100)结果。
EXEC addresult1 1005.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。
CREATE PROCEDURE addresult2@n int=10,/*最后一个数*/@sum int out/*结果*/ASDECLARE @i int=0BEGINset @sum=0WHILE(@i<=@n)BEGINSET @sum=@sum+@iSET @i=@i+1ENDENDGO6.调用上面修改后的addresult2存储过程,设置变量@s接收计算l+2+3+…+10的结果。
实验六管理存储过程
实验六存储过程与触发器一、存储过程【创建存储过程】:CREATE PROCEDURE [OWNER].[PROCEDURE NAME]AS <SQL块>如:Use pubsGoCreate procedure author_informationAsselect au_lname,au_fname,title,pub_namefrom authors ajoin titleauthor taon a.au_id=ta.au_idjoin titles ton t.title_id=ta.title_idjoin publishers pon t.pub_id=p.pub_idGo【管理存储过程】:➢可以使用sp_helptext命令查看创建存储过程的文本信息。
Use pubsGoSp_helptext author_informationGo➢可以用sp_help查看存储过程的一般信息。
Use pubsGoSp_help author_informationGo➢可以使用系统存储过程sp_rename修改存储过程的名字。
Use pubsGoSp_rename author_information ,authors_informationGo➢也可以使用企业管理浏览存储过程的信息,具体方法是:✧从树型结构上选中存储过程所在的数据库节点,展开该节点;✧选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所有的存储过程;✧选中存储过程,右击,执行〖属性〗命令,则系统将弹出如图所示对话框。
✧可以在对话框中修改存储过程内容,并保存修改。
✧如果想知道某个表被存储过程引用的情况,可以使用sp_depends,Sp_depends authors✧如果想知道某个存储过程引用表的情况,则可以使用Sp_depends procedure_name【执行存储过程】:对于存储过程的调用,应使用EXECUTE或EXEC关键字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六存储过程与触发器一、存储过程【创建存储过程】:CREATE PROCEDURE [OWNER].[PROCEDURE NAME]AS <SQL块>如:Use pubsGoCreate procedure author_informationAsselect au_lname,au_fname,title,pub_namefrom authors ajoin titleauthor taon a.au_id=ta.au_idjoin titles ton t.title_id=ta.title_idjoin publishers pon t.pub_id=p.pub_idGo【管理存储过程】:➢可以使用sp_helptext命令查看创建存储过程的文本信息。
Use pubsGoSp_helptext author_informationGo➢可以用sp_help查看存储过程的一般信息。
Use pubsGoSp_help author_informationGo➢可以使用系统存储过程sp_rename修改存储过程的名字。
Use pubsGoSp_rename author_information ,authors_informationGo➢也可以使用企业管理浏览存储过程的信息,具体方法是:✧从树型结构上选中存储过程所在的数据库节点,展开该节点;✧选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所有的存储过程;✧选中存储过程,右击,执行〖属性〗命令,则系统将弹出如图所示对话框。
✧可以在对话框中修改存储过程内容,并保存修改。
✧如果想知道某个表被存储过程引用的情况,可以使用sp_depends,Sp_depends authors✧如果想知道某个存储过程引用表的情况,则可以使用Sp_depends procedure_name【执行存储过程】:对于存储过程的调用,应使用EXECUTE或EXEC关键字。
Use pubsGoExec authors_informationGo【删除存储过程】:➢DROP PROCEDURE {procedure}{,……n}Use pubsGoDrop procedure authors_informationGo➢也可以使用企业管理器来删除存储过程,方法是:✧从树型结构上选中存储过程所在的数据库节点,展开该节点;✧选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所有的存储过程;选中要删除的存储过程,右击,执行〖删除〗命令,则系统将弹出如图所示对话框。
单击〖全部除去〗按钮,将删除所选中的存储过程。
【修改存储过程】:SQL server允许在不改变存储过程使用许可,不改变名字的情况下,对存储过程进行定义的修改。
Alter proc[edure] procedure_nameAS sql_statement二、触发器触发器(triegger)是一种特殊的存储过程,它与表格紧密相连,可以看作是表格定义的一部分。
当使用UPDATE、INSERT或DELETE等语句对表进行修改操作时,DBA 常扩触发器来实现自动触发的处理方法。
当用户修改指定表或视图中的数据时,触发器将会自动执行。
触发器基于一个表创建,但是可能针对多个表进行操作。
所以触发器常被用来实现复杂的商业规则。
例如:在pubs数据库晨,存放着出版商publishers的信息,出版物的信息titles、出版特与作者关联的信息titleauthor以及作者作息authors。
现在,有一条出版商的信息被删除了,则所以由该出版商的出版物都应该将pub_id修改为NULL,或者删除有关的出版物信息。
同样titleauthor表中的信息也应该相应地得到修改。
这样关联到三张表的一致性维护问题,可以使用触发器来实现。
在publishers表上设置一个DELETE触发器,当删除一条publishers信息时,触发器自动执行,对titles表和titleauthor表进行修改。
在SQL server中一张表可以有多个触发器。
用户可以针对INSERT、UPDATE或DELETE 语句分别设置触发器,也可以针对一张表上的特定操作设置多个触发器。
解发器可以容纳非常复杂的Transact-SQL语句。
但是,不管触发器所进行的操作有多复杂,触发器都只作为一个独立的单元被执行,被看作是一个事务。
如果在执行触发器的过程中发生了错误,则整个事务将会自动回退。
触发器在服务器将特定的操作(UPDATE、INSERT、DELETE)执行结束后才执行。
如果在执行特定数据库操作的过程中,发生了系统错误,则触发器不会被触发。
这种触发器类型是默认的类型,好AFTER类型。
在SQL server 2000中引进了一种新的触发器类型:INSTEAD OF类型。
这种类型的触发器取代了触发该触发器执行的SQL代码。
换句话说,它将覆盖该代码引起的变化。
通常这种类型的触发器用在需要维护数据一致性的地方。
触发器主要提供下列功能:➢级联修改数据库中的所有相关表➢撤消或回退违反引用完整性的操作,防止非法修改数据➢执行比核查约束CHECK更复杂的约束操作➢查找在数据修改前后的表状态之间的差别,并根据差别分别采取相应的措施➢在一张表的同一类型的操作(UPDATE、INSERT、DELETE)上设置多个触发器,从而可以针对同样的修改语句执行不同的多种操作〖注意〗:◆只有表的拥有者才可以在表上创建或删除触发器,这样权限不许转授。
◆尽管可以在触发器中引用视图或临时表,但不能在视图或临时表或系统表上创建触发器。
◆使用UPDATE语句可以一次对多个数据进行修改,但不管修改了多少数据,触发器都中触发一次。
◆在执行修改语句过程中,触发器的执行是修改语句事务的一部分。
所以,如果触发器执行不成功,则整个修改事务将会回退。
◆当使用约束、规则、默认值就可以实现预定的数据完整性时,应优先考虑使用这三种措施TRUNCATE TABLE 虽然在功能上与DELETE操作类似,但是 TRUNCATE TABLE不会触发DELETE触发器运行。
【创建触发器】:CREATE TRIGGER trigger_name ON table|viewAS <SQL块>Use NorthwindIf exists (select name from sysobjectsWhere name=’tr_procedure_update’ AND type=’TR’Drop trigger tr_product_updateGoCreate trigger tr_product_update ON productsFor UPDATEDeclare @msg varchar(100)Select @msg=str(@@rowcount)+”employees updated by this statement”Print @msgReturnGo这个触发器在用户针对products表执行UPDATE执行,返回共修改了多少行数据。
其中@msg是一个变量,数据类型为varchar(100),@@rowcount是一个系统存储过程。
它返回当前被修改的行数。
创建触发器的语句CREATE TRIGGER必须写在批处理的第一行,否则系统将会返回错误信息。
在CREATE TRIGGER语句中,不能使用SELECT语句返回针对表格查询的数据,因为触发器不接收用户应用程序传递的参数,从而也无法向用户应用程序返回查询表格数据所得到的结果。
〖注意〗:由于系统表怕存储数据的特殊性和重要性,所以建议用户不要自己在系统表上建立触发器。
【管理触发器】:触发器是特殊的存储过程,所以适用于存储过程的管理方式,都适用于触发器。
所以用户完全可以使用sp_helptext,sp_help,sp_depens等系统存储过程,以及使用企业管理器来浏览触发器的有关信息,也可以使用sp_helptrigger来浏览指定表格上,指定类型的触发器的信息,语法是:Sp_helptrigger table_name, [type]如:use northwindGoSp_helptrigger products, delete〖提示〗:如果不设置type的值,则返回定义在该表上的所有触发器的信息。
【删除触发器】:➢DROP TRIGGER {trigger} {,……n}当用户删除某个表格时,所有建立在该表上的触发器都将被删除。
步骤为:①选中要创建触发器的〖表〗所在的数据库,展开该节点;②展开该数据库节点下的〖表〗节点;③选中指定的表,右击,从快捷菜单中展开〖全部任务〗子菜单,执行〖管理触发器〗命令,将弹出如图所示对话框;④从〖名称〗下拉菜单里选择要删除的触发器;⑤单击〖删除〗按钮,删除该触发器;⑥单击〖确定〗按钮完成操作。
【修改触发器】:Alter trigger trigger_nameON tableTransact-SQL编程:全局变量以两个@@为标记,如@@CONNECTION局部变量以一个@为标记,如@A定义局部变量:DECLARE @local_varible1 char(4), @local_varible2 char(8)显示局部变量:SELECT @local_varible1 ,SELECT @local_varible2给局部变量赋值:SET @local_varible=expressionTransact-SQL语句中以BEGIN和END为程序块的关键字。
无条件退出语句:RETURN实验范例:1、用存储过程查询缺成绩的学生学号和课程号create procedure pro1asselect sname,cnofrom student,scwhere student.sno=sc.sno and grade is null2、用存储过程查询指定课程选课的学生人数最高成绩以及最低成绩和平均成绩create procedure pro2AsSelect count(cno), avg(grade)From scGroup by sno3、用存储过程查询指定课程选课的学生人数、最高成绩、最低成绩和平均成绩create procedure pro3 @cno char(4)AsSelect count(sno),max(grade),min(grade),avg(grade)From scWhere cno=@cnoGroup by cnoExec pro3 ‘2’4、用存储过程求某系学生选修的课程号及成绩create procedure pro4 @sdept char(15),@sno char(9)AsSelect cno,gradeFrom student,scWhere student.sno=sc.sno and sdept=@sdept and student.sno=@sno 5、用存储过程查询某门课程成绩大于80分的学生姓名create procedure pro5 @cno char(4)AsSelect snameFrom student,scWhere student.sno=sc.sno and cno=@cno and grade>’80’6、创建sc1表,结构与sc一样,然后创建触发器,当SC表添加数据时,SC1表也同时添加create table sc1(sno char(9),Cno char(4),Grade int,Primary key(sno,cno),Foreign key (sno) references student(sno),Foreign key (cno) references course(cno)If exists (select name from sysobjects where name=’ord’and type=’TR’Drop trigger ordGoCreate trigger ordOn scFor insertIf exists(select * from inserted)BeginInsert into sc1 select * from insertedEndGo希望以上资料对你有所帮助,附励志名言3条:1、要接受自己行动所带来的责任而非自己成就所带来的荣耀。