实验五存储过程
网络存储过程实验报告(3篇)
第1篇一、实验背景随着互联网技术的快速发展,数据存储和传输已成为网络通信中的关键环节。
网络存储过程是数据库中的一种高级应用,它可以将多个SQL语句封装成一个存储过程,从而实现数据库的自动化管理和提高数据库的执行效率。
本实验旨在通过实践,掌握网络存储过程的创建、调用和优化方法。
二、实验目的1. 了解网络存储过程的基本概念和特点。
2. 掌握网络存储过程的创建方法。
3. 熟悉网络存储过程的调用和优化技巧。
4. 通过实验,提高数据库管理能力。
三、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 实验工具:MySQL Workbench四、实验内容1. 创建网络存储过程(1)创建一个名为“select_user_info”的存储过程,用于查询用户信息。
```sqlDELIMITER //CREATE PROCEDURE select_user_info(IN user_id INT)BEGINSELECT FROM users WHERE id = user_id;END //DELIMITER ;```(2)创建一个名为“update_user_info”的存储过程,用于更新用户信息。
```sqlDELIMITER //CREATE PROCEDURE update_user_info(IN user_id INT, IN user_name VARCHAR(50), IN user_age INT)BEGINUPDATE users SET name = user_name, age = user_age WHERE id = user_id;END //DELIMITER ;```2. 调用网络存储过程(1)调用“select_user_info”存储过程,查询用户ID为1的用户信息。
```sqlCALL select_user_info(1);```(2)调用“update_user_info”存储过程,更新用户ID为1的用户信息。
实验五 存储过程
实验五存储过程的创建与调用一.实验目的:了解存储过程的概念和作用,掌握创建存储过程的方法,为后继学习作准备。
二.实验属性:设计性。
三.实验仪器设备及器材:装有.NET和SQL Server的电脑。
四.实验要求程序的主界面图1.11、利用存储过程,给student表添加一条学生信息。
建立存储过程stu_insertUSE[sheng]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE[dbo].[stu_insert]@Sno char(10)= 0,@Sname char(10)= 0,@Ssex char(10)= 0,@Sage smallint= 0,@Sdept char(10)=0ASBEGINSET NOCOUNT ON;insertinto Studentvalues(@Sno,@Sname,@Ssex,@Sage,@Sdept)END在添加Button上添加时间处理程序//SqlConnection sqlconn = new SqlConnection(conn);string sno,sname,ssex,sage,sdept;sno=textBox1.Text.ToString();sname=textBox2.Text.ToString();ssex=textBox3.Text.ToString();sage=textBox4.Text.ToString();sdept=textBox5.Text.ToString();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "stu_insert";mandType = CommandType.StoredProcedure;IDataParameter[] parameters = {new SqlParameter("@Sno", SqlDbType.Char,4),new SqlParameter("@Sname", SqlDbType.Char,4) ,new SqlParameter("@Ssex", SqlDbType.Char,10) ,new SqlParameter("@Sage", SqlDbType.Int,10) ,new SqlParameter("@Sdept", SqlDbType.Char,15) ,};conn.Open();cmd.Parameters.Add("@Sno", SqlDbType.VarChar).Value = sno;cmd.Parameters.Add("@Sname", SqlDbType.VarChar).Value = sname; cmd.Parameters.Add("@Ssex", SqlDbType.VarChar).Value = ssex; cmd.Parameters.Add("@Sage", SqlDbType.VarChar).Value = sage; cmd.Parameters.Add("@Sdept", SqlDbType.VarChar).Value = sdept; cmd.ExecuteNonQuery().ToString();conn.Close();执行结果图1.22、利用存储过程从student、course、sc表的连接中返回所有学生的学号、姓名、所选课程及成绩。
存储过程和触发器实验心得
存储过程和触发器实验心得1、PLSQL创建储存过程编译出错不会给出错误提示,导致调用时提示储存过程处于无效状态。
解决方案:使用SQLPLUS,不过SQLPLUS只会提示编译错误,不会提示具体原因,还可以使用Navicat工具,Navicat会给出更加详细的错误原因。
2、创建储存过程时,设置变量参数类型时,指定了字符长度导致创建失败。
解决方案:直接设置变量数据类型,不设置其字符长度。
3、使用TO_DATE(SYSDATE,‘YYYY/MM/DD’)获取当前日期作为借阅日期导致调用借书储存过程失败,提示参数类型错误。
解决方案:因为TO_DATE()函数是将字符类型转换成日期类型,而SYSDATE本来就是日期类型,所以导致调用失败,使用TO_DATE(TO_CHAR(SYSDATE,‘YYYY/MM/DD’),‘YYYY/MM/DD ’)将SYSDATE转换成字符类型再转换成日期类型。
4、使用DBMS_OUTPUT.PUT_LINE()函数输出提示,没有反应。
解决方案:在SQLPLUS中需要先使用SET SERVEROUTPUT ON;打开输出模式才能看见输出,而在PLSQL中输出的内容在另一个Output窗口中,而不是没有反应。
5、创建自动递增借阅流水号的触发器时,使用NEW关键字改变借阅流水号,导致创建触发器失败,解决方案:使用NEW关键字时,需要在前面加一个“:”号,如“:NEW.借阅流水号”。
6、调用修改后的借书储存过程时,发送错误,提示违反唯一约束条件以及COMMIT;不能再触发器中使用。
解决方案:删除在触发器中的COMMIT;,然后删除序列“借阅流水号序列”,重新创建序列“借阅流水号序列”,并且设置初始值为8,因为借阅表中已经有借阅流水号1到7的数据了,然后创建序列时未指定初始值,序列默认从1开始,导致违反唯一约束条件,从而导致调用储存过程失败。
四、实验心得体会通过本次实验,学会了储存过程以及触发器和序列的使用方法,对存储过程有了一个直观的认识,对触发器的工作原理和作用有了更加深刻的认识,使用触发器可以在修改数据前后规范数据,使数据规范化和标准化。
存储过程和触发器(数据库实验5)
数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。
2 实验平台:操作系统:Windows xp。
实验环境:SQL Server 2000以上版本。
3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。
1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。
存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。
存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。
'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。
如果没有该专业,则显示“无此专业”。
存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。
数据库存储过程实验报告
数据库存储过程实验报告一、实验目的理解存储过程的概念、建立和调用方法。
二、实验环境三、实验示例1、定义一个函数,按性别计算所有学生的平均年龄。
CREATE FUNCTION aver_age(@sex char(2)) RETURNS int ASBEGINDECLARE @aver intSELECT @aver=( SELECT avg(年龄)FROM sWHERE sex=@SEX)RETURN @averENDGO如下程序对上例定义的aver_age函数进行调用。
USE student /*用户函数在此数据库中已定义*//*定义局部变量*/DECLARE @sex char(2)DECLARE @aver1 int/*给局部变量赋值*/SELECT @sex = ‘女’SELECT @aver1=dbo.aver_age(@sex) /*调用用户函数,并将返回值赋给局部变量*//*显示局部变量的值*/SELECT @aver1 AS '男性学生的平均年龄'2、利用student数据库中的S、SC表,编写一无参存储过程用于查询每个学生的选课情况,然后调用该存储过程。
CREATE PROCEDURE xuanke_infoASSELECT S.#,sname,sex,age,c#,scoreFROM S INNER JOIN scON s.s#=sc.s#GO3、使用带参数的存储过程创建存储过程,根据student数据库的3个表查询指定学生的选课情况。
CREATE PROCEDURE stu_info @sname (8)ASSELECT S.#,sname,sex,age,c#,cname,scoreFROM S,SC,CWhere s.s#=sc.s# and sc.c#=c.c# and sname=@snameGOEXECUTE stu_info '张三'4、使用带OUTPUT参数的存储过程编写存储过程,根据给定的学生学号,计算该生的平均成绩Create procedure stuavg @sno char(4) @s_sum float output,@s_avg float outputAsSelect @s_sum=sum(score),s_avg=avg(score)From scWhere s#=@sno在调用存储过程stuavg时,存储过程定义时的形参名和调用时的变量名不一定要匹配,不过数据类型和参数位置必须匹配。
存储过程的使用 实验报告
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最高成绩,
实验训练5:存储过程与函数的构建与使用
实验训练5:存储过程与函数的构建与使用一、存储过程与函数的概念存储过程和函数都是数据库中的可执行代码,可以被多次调用和重复使用。
存储过程是一组预定义的SQL语句集合,可以在数据库中定义和存储。
而函数是一个独立的代码块,它接收输入参数并返回一个值。
二、存储过程的构建与使用1. 创建存储过程在MySQL中,创建存储过程需要使用CREATE PROCEDURE语句。
例如:CREATE PROCEDURE myproc()BEGINSELECT * FROM mytable;END;这个例子创建了一个名为myproc的存储过程,它会查询mytable表中的所有数据。
2. 调用存储过程使用CALL语句可以调用已经创建好的存储过程。
例如:CALL myproc();这个语句会执行myproc存储过程中定义的SQL语句。
3. 存储过程参数我们可以给存储过程添加参数来使其更加灵活。
例如:CREATE PROCEDURE myproc(IN p1 INT, IN p2 VARCHAR(50)) BEGINSELECT * FROM mytable WHERE column1 = p1 AND column2 = p2;END;这个例子创建了一个带有两个输入参数p1和p2的存储过程,它会查询mytable表中column1等于p1并且column2等于p2的数据。
4. 存储过程变量除了参数之外,存储过程还可以使用变量来存储中间结果。
例如:CREATE PROCEDURE myproc(IN p1 INT)BEGINDECLARE v1 INT;SET v1 = p1 * 2;SELECT * FROM mytable WHERE column1 = v1;END;这个例子创建了一个带有一个输入参数p1和一个变量v1的存储过程,它会将p1乘以2并将结果存储在v1变量中,然后查询mytable表中column1等于v1的数据。
实验5 存储过程
实验报告5课程数据库原理与应用实验名称存储过程专业班级学号姓名实验日期:年月日评分一、实验目的1.掌握编写存储过程和用户自定义函数的SQL语法;2.掌握存储过程调用方法,以及参数的传递与返回值。
3.掌握局部变量的声明、赋值和使用。
4.掌握流程控制,if语句、case语句的使用。
5.掌握游标的使用方法。
二、实验内容1.创建存储过程,指定输入参数、输出参数、返回值等。
2.调用存储过程,验证结果。
3.修改、删除存储过程。
4.设计和应用游标进行查询记录的处理。
三、实验环境(1)硬件:PC机(2)软件:Windows 操作系统、MySQL或SQL Server四、实验步骤(描述实验步骤及中间的结果或现象。
在实验中做了什么事情,怎么做的,发生的现象和中间结果)1.创建并执行存储过程。
(1)根据学生表,创建存储过程,根据学号(输入参数)能从学生表中查询学生的姓名、性别和出生年份(调用系统函数year()和now()(选做));CREATE PROCEDURE a_stu(IN iSno char(10))BEGINSELECT Sno,sname,ssex FROM studentwhere Sno=iSno;END;call a_stu(‘200215121’);⏹(2)根据学生表,创建一存储过程,能向学生表中插入一名新学生的记录,学生的学号、姓名、性别……等信息以参数形式给出。
⏹(3)创建一存储过程,根据学生的学号和课程名检索该生该课程的成绩,要求将成绩设计为输出参数的形式;2.设计和应用游标,要求能实现:⏹(1)使用游标,统计每门课程的选修人数,并将结果存入表tb_AvgGrade(该表包括课程号、课程名、选修人数3个属性),没有人选修的课程选修人数设为0。
3.创建用户自定义函数,要求能实现:⏹(1)根据输入的课程号,统计该课程平均成绩,并返回该值。
五、实验结果与讨论(描述最终得到的结果,并进行分析说明,可能的误差原因)六、总结(说明实验过程中遇到的问题及解决办法;新发现或个人的收获;未解决/需进一步研讨的问题或建议新实验方法等)。
存储过程及触发器实验报告
数据库技术与应用实验报告七班级:机械因材学号: 16 姓名:高永吉一:实验名称:存储过程及触发器二,实验目的:⑴ 使用系统常用的存储过程;⑵ 掌握存储过程的创建及应用(3) 理解触发器的概念;(4) 掌握触发器的创建及应用。
三.实验内容、过程和结果:存储过程1创建一个存储过程,查看学号为1(根据实际情况取)的学生的信息,包括该学生的学号,班级编号,姓名。
(提示:查询涉及到表Student)2执行1中创建的存储过程。
3使用输入参数创建题1中的存储过程。
题1中所创建的存储过程只能学号为1的学生信息进行查看,要想对其他学生进行查看,需要进行参数传递。
4执行3中创建的存储过程,(1)按位置传递参数;(2)通过参数名传递参数;5触发器1)在课程表Course上创建一个触发器,该触发器被操作DELETE所触发,且要求触发触发器的DELETE语句在执行被取消。
2)在表Student中建立插入触发器, 插入一条记录时,若年龄>100或者年龄<=0,拒绝插入记录并显示:“年龄不符合规定,无法插入此记录!”;3)创建一个触发器,如果在Student表中添加或更改数据,向客户端显示一条消息“你正在插入或修改学生表的数据”,要求触发触发器的DELETE、UPDATE语句被执行。
4 )为Course表创建一个名称为my_trig的触发器,当用户成功删除该表中的一条或多条记录时,触发器自动删除Student表中与之有关的记录。
5 )使用系统存储过程查看创建的触发器。
图一:创建一个存储过程,查看Tno为1(根据实际情况取)的教师的信息,包括该教师的姓名,sal图二执行1中创建的存储过程。
图三使用输入参数创建题1中的存储过程。
图四执行3中创建的存储过程,(按位置传递参数)图五执行3中创建的存储过程通过参数名传递参数;图六使用系统存储过程查看3中创建的存储过程图七删除3中创建的存储过程。
图八在Teacher上创建一个触发器,该触发器被操作DELETE所触发,且要求触发触发器的DELETE语句在执行被取消。
实验五 存储过程和触发器的使用
实验五存储过程和触发器的使用【目的要求】1、了解存储过程的基本概念和类型。
2、了解创建存储过程的T-SQL语句的基本语法。
3、了解查看、执行、修改和删除存储过程的T-SQL命令的用法。
4、了解触发器的基本概念和类型。
5、了解创建触发器的T-SQL语句的基本语法。
6、了解查看、修改和删除存储过程的T-SQL命令的用法。
【实验内容】内容一:存储过程的使用一、数据需求分析存储过程是一种数据库对象,为了实现某个特定任务,将一组预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调用,自动完成需要预先执行的任务。
存储过程在第一次执行时进行编译,然后将编译好的代码保存在高速缓存中便于以后调用,提高了代码的执行效率。
二、内容要点分析1、SQL SERVER支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。
其中,系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。
系统存储过程定义在系统数据库master中,其前缀是sp_。
本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,不能以sp_为前缀。
2、只能在当前数据库中创建存储过程。
3、创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。
4、创建存储过程的T-SQL语句CREATE PROC[EDURE] 存储过程名称[{ @参数名称数据类型 }] [,…n][WITH{ RECOMPILE|ENCRYPTION }]ASSQL语句序列说明:(1)RECOMPILE表明每次运行该过程时,将其重新编译。
(2)ENCRYPTION表示 SQL SERVER 加密SYSCOMMENTS表中包含CREATE PROCEDURE语句文本的条目。
注:必须将CREATE PROCEDURE语句放在单个批处理中。
5 实验五 创建存储过程和触发器
实验五创建存储过程和触发器
一、实验目的
1.通过对常用系统存储过程的使用,了解存储过程的类型;通过创建和执行存储过程,了解存储过程的基本概念,掌握使用企业管理器及查询分析器执行T-SQL语句创建存储过程。
2.通过创建触发器,了解触发器的基本概念,理解触发器的功能,掌握使用企业管理器及查询分析器执行T-SQL语句创建触发器。
二、实验要求
1.实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;
2.能认真独立完成实验内容;
3.实验后做好实验总结,根据实验情况完成总结报告。
三、实验学时
2学时
四、实验内容
1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。
2、在实验二创建的factory数据库中执行以下操作:
(1)创建一个为worker表添加职工记录的存储过程addworker。
执行并验证存储过程的正确性。
最后删除该存储过程。
(2)在depart表上创建一个触发器depart_update,当更改部门号时同步更改worker 表中对应的部门号。
执行并验证触发器的正确性。
最后删除该触发器。
(3)在worker表上创建一个触发器worker_delete,当删除职工记录时同步删除salary表中对应职工的工资记录。
执行并验证触发器的正确性。
最后删除该触发器。
存储过程操作实验报告
一、实验模块数据库原理与应用二、实验标题存储过程操作实验三、实验内容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)成功创建存储过程和触发器。
实验存储过程实验报告
一、实验目的1. 了解存储过程的基本概念和作用。
2. 掌握存储过程的创建、执行和修改方法。
3. 学会使用存储过程进行数据库操作,提高数据库操作效率。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench三、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程四、实验步骤1. 创建存储过程(1)打开MySQL Workbench,连接到本地数据库。
(2)在查询窗口中输入以下SQL语句创建一个存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT FROM students;END //DELIMITER ;(3)执行以上SQL语句,成功创建存储过程。
2. 执行存储过程(1)在查询窗口中输入以下SQL语句执行存储过程:CALL SelectAllStudents();(2)观察查询结果,确认存储过程执行成功。
3. 修改存储过程(1)打开查询窗口,输入以下SQL语句修改存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT id, name, age FROM students;END //DELIMITER ;(2)执行以上SQL语句,成功修改存储过程。
4. 删除存储过程(1)在查询窗口中输入以下SQL语句删除存储过程:DROP PROCEDURE IF EXISTS SelectAllStudents;(2)执行以上SQL语句,成功删除存储过程。
五、实验总结1. 通过本次实验,我们了解了存储过程的基本概念和作用,学会了创建、执行、修改和删除存储过程的方法。
2. 存储过程可以提高数据库操作效率,降低代码重复性,提高代码可维护性。
3. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。
实验五 存储过程和触发器
实验五触发器、存储过程操作实验本实验需要2学时。
请大家先根据“触发器.doc”文档完成相关操作,再进行本次实验。
介绍完“存储过程”后,需上交本次实验报告。
一、实验目的(1)掌握SQL Server中的触发器的使用方法;(2)掌握存储过程的操作方法。
二、实验内容1. 创建、查看、修改和删除触发器。
2. 创建、查看、修改和删除存储过程。
三、实验方法1. 触发器的操作(1)建立触发器方法一:使用企业管理器首先,打开企业管理器,定位数据库并找到要创建触发器的表;然后,右击该表名,在弹出的快捷菜单中选择“设计表”,在打开的“设计表”窗口中单击按钮,打开如图1所示窗口。
图1 触发器属性窗口最后,在触发器属性窗口中输入触发器的内容,并单击“确定”按钮。
方法二:使用CREATE TRIGGER语句语法:CREATE TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]}AS<SQL 语句块>(2)查看触发器方法一:使用企业管理器方法二:使用T-SQL语句- sp_help <触发器名>- sp_helptext <触发器名>- sp_depends <触发器名>(3)修改触发器方法一:使用企业管理器方法二:使用ALTER TRIGGER语句语法:ALTER TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]} AS<SQL 语句块>(4)删除触发器方法一:使用企业管理器方法二:使用DROP TRIGGER语句语法为:DROP TRIGGER <触发器名>2. 存储过程的操作(1)建立存储过程方法一:使用建立存储过程向导方法二:使用企业管理器方法三:使用SQL语句(CREATE PROCEDURE)语法:CREATE PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句> | <语句块> }(2)查看存储过程方法一:使用企业管理器方法二:使用SQL语句(系统存储过程)- sp_help <存储过程名>- sp_helptext <存储过程名>- sp_depends <存储过程名>(3)修改存储过程方法一:使用企业管理器方法二:使用SQL语句(ALTER PROCEDURE)语法为:ALTER PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句>| <语句块> }(4)删除存储过程方法一:使用企业管理器方法二:使用DROP PROCEDURE语句语法为:DROP PROCEDURE <存储过程名>四、实验内容1、在学生表student上建立一个DELETE类型的触发器tr_delete,触发动作是显示信息“已删除学生表中的数据”。
存储过程实验报告
《数据库系统原理》实验报告实验名称:存储过程和函数实验任课教师:学号:姓名:完成日期 2012年11月17日一、实验目的1、熟悉ORACLE存储过程和函数的定义及使用2、了解其在数据库中的存储二、实验步骤与实验结果1、创建存储过程create [or replace] procedure [模式名] 过程名[(参数[IN/OUT/IN OUT] 参数类型)]{is/as}[语句序列][说明部分]begin[exception 例外处理]end [过程名];说明:IN参数:输入参数,主程序向过程传递参数;OUT参数:输出参数,过程向主程序传递参数;IN OUT参数:可以实现过程与主过程双向交流数据。
如果存储过程有OUT或者IN OUT类型的参数,那么存储过程就只能在PL/SQL中被调用,不能使用EXECUTE或者CALL调用。
set serveroutput on 打开oracle的输出图1打开oracle的输出例:不带参数的存储过程图2不带参数的存储过程例:带有输入参数的存储过程图3带有输入参数的存储过程例:既有输入参数又有输出参数的存储过程图4既有输入参数又有输出参数的存储过程例:PL/SQL环境下存储过程的定义与执行图5 PL/SQL环境下存储过程的定义图6 PL/SQL环境下存储过程的执行2、创建函数CREATE [OR REPLACE] FUNCTION [模式名.] 函数名[(参数名[IN] 数据类型……)]RETURN 数据类型{IS/AS}[说明部分]BEGIN语句序列RETURN (表达式)[EXCEPTION例外处理程序]END [函数名];说明:函数只能有输入参数,不能有输出参数,函数有且只有一个返回值。
例:带有两个参数的函数,函数返回两个参数的和图7带有两个参数的函数,函数返回两个参数的和图8带有两个参数的函数,函数返回两个参数的和4、分析、实现上述例题并完成如下功能要求设有基于图书馆数据库的4个基本表:图书(书号,书名,作者,出版社,单价)读者(读者号,姓名,性别,办公电话,部门,读者类别编号)借阅(读者号,书号,借出日期,归还日期)读者类别(读者类别编号,读者类别,允许借阅册数,允许借阅天数)编写存储过程实现:1)根据读者号查询该读者的图书借阅的册数图9 查询该读者的图书借阅的册数2)根据书名和作者查询相应的出版社和单价图10 查询相应的出版社和单价3)读者借阅图书时,需要查询是否超出允许借阅册数,如果超出则不能继续借阅图书,试创建一存储过程完成此查询功能。
实验报告5 数据库编程存储过程
实验5:数据库编程——存储过程一.实验目的通过本实验使学生掌握存储过程的基本概念和创建、执行、删除方法。
二.实验类型验证型三.实验学时2学时四.实验原理及知识点1.Transact-SQL编程2.存储过程的创建和执行3.存储过程的修改和删除五.实验环境1.硬件设备要求:PC及其联网环境;2.软件设备要求:Windows操作系统;MS SQL Server数据库管理系统。
六.实验内容及步骤利用存储过程实现下面的应用:从账户1转指定数额的款项到账户2中。
假设账户关系表为Account(Accountnum,total)存储过程create procedure pro_transfer(@inAccount int,@outAccount int,@amount float)asdeclare@totalDepositOut float,@totalDepositIn float,@inAccountnum int;beginselect@totalDepositOut=(select total from Account where accountnum =@outAccount);if (@totalDepositOut is null)beginrollback;return;endif (@totalDepositOut<@amount)beginrollback;return;endselect@inAccount=(select accountnum from Account where accountnum =@inAccount)if(@inAccountnum is null)beginrollback;return;endupdate Account set total=toal-@amountwhere accountnum=@outAccount;update Account set total=total+@amountwhere accountnum=@inAccount;commit;end七.实验总结通过这次实验学会写简单的存储过程,了解了在sql server 2008中的存储过程的基本语法,发现存储过程的语法和pascal有很大的相似之处,不过sql server 2008的语法和书上的语法有很大的不同,只能自己去网上找资料,不过这锻炼了我的自学能力,不过就写一个存储过程还是有很多不够,还是要勤加练习。
存储过程实验报告_总结(3篇)
第1篇一、实验背景随着数据库技术的不断发展,存储过程在数据库管理中的应用越来越广泛。
存储过程是一组为了完成特定功能的SQL语句集合,它具有提高数据库性能、增强安全性、简化应用开发等优点。
为了更好地掌握存储过程的应用,我们进行了本次实验。
二、实验目的1. 理解存储过程的概念、特点和应用场景。
2. 掌握存储过程的创建、执行、修改和删除方法。
3. 学习使用存储过程实现常见的数据库操作,如数据插入、查询、更新和删除。
4. 熟悉存储过程中的流程控制语句、循环语句和游标操作。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 开发工具:MySQL Workbench四、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程5. 存储过程中的流程控制语句6. 存储过程中的循环语句7. 存储过程中的游标操作五、实验步骤1. 创建存储过程首先,我们创建一个简单的存储过程,用于查询特定部门的所有员工信息。
```sqlCREATE PROCEDURE GetEmployeeInfo(IN dept_id INT)BEGINSELECT FROM employees WHERE department_id = dept_id;END;```在此过程中,我们使用了`IN`参数,表示该参数在调用存储过程时传入。
2. 执行存储过程创建存储过程后,我们可以通过以下命令执行它:```sqlCALL GetEmployeeInfo(10);```这将查询部门ID为10的所有员工信息。
3. 修改存储过程如果需要修改存储过程,可以使用`ALTER PROCEDURE`语句。
例如,将查询条件修改为按姓名查询:```sqlALTER PROCEDURE GetEmployeeInfo(IN emp_name VARCHAR(50))BEGINSELECT FROM employees WHERE name = emp_name;END;```4. 删除存储过程删除存储过程可以使用`DROP PROCEDURE`语句。
实验五 存储过程
实验五存储过程一、实验背景存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。
存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
二、实验目的1.了解存储过程基本概念。
2.掌握:利用Transact-SQL编写存储过程3.掌握:存储过程的管理4.理解带参数存储过程的写法以及不同的调用方法三、实验任务与要求[1] 编写存储过程,实现任意输入三个数字,打印出三个数字中的最大值。
[2]编写存储过程,实现系统的登录验证,传入用户名和密码,返回权限字符串(已知用户表结构CREATE TABLE [dbo].[users]([seq] [int] IDENTITY(1,1) NOT NULL,[username] [varchar](20) NOT NULL,[password] [varchar](20) NULL,[rightsStr] [varchar](50) NULL,CONSTRAINT [PK_users] PRIMARY KEY([seq] ASC)) ;insert into users([username],[password],[rightsStr]) values ('lrl', '123456','11111111111');insert into users([username],[password] ,[rightsStr]) values ('test', '654321','10101010101'); insert into users([username] ,[password],[rightsStr]) values ('other', '111111','10111111111');[3] 已知表结构CREATE TABLE [student]([xh] [varchar](50) ,[name] [varchar](50) NULL ,[address] [varchar](150) NULL,[birthday] [datetime] NULL,CONSTRAINT [PK_student] PRIMARY KEY( [xh] ASC) ON [PRIMARY]) ON [PRIMARY]编写一个存储过程,实现带有条件判断的插入功能的存储过程sp_MaintainStudent,要根据学号判断该学生是否已经存在,如果存在,则更新信息,如不存在,则插入信息。
数据库实验5 存储过程和触发器
实验五存储过程和触发器一、实验目的(1) 通过实践理解存储过程和触发器的概念、作用及优点;(2) 掌握存储过程的定义与调用,实现存储过程中带有不同参数的应用;(3) 掌握创建触发器。
二、实验原理1.存储过程一个被命名的存储在服务器上的T-SQL语句的集合,是封装重复性工作的一种方法。
(1)创建存储过程CREATE PROC[DURE]PROCDURE_NAME [{@PARAMENT DATA_TYPE}[VARYING][=DEFAULT][OUTPUT]] [, (1)AS SQL_STATEMENTPROCEDURE_NAME:新存储过程的名称,必须符合标识符规则且唯一。
@PARAMETER:过程中的参数。
可以声明一个或多个参数。
用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。
使用 @ 符号作为第一个字符来指定参数名称。
参数名称须符合标识符规则。
每个过程的参数仅用于该过程本身;相同的参数名称可用在其它过程中。
默认情况下参数只能代替常量,不能代替表名、列名或其它数据库对象名称。
DATA_TYPE:参数的数据类型。
DEFAULT:参数的默认值。
如果定义了默认值,不必指定该参数的值即可执行过程。
默认值必须是常量或 NULL。
OUTPUT:表明参数是返回参数。
该选项的值可以返回给 EXEC[UTE]。
使用 OUTPUT 参数可将信息返回给调用过程。
(2)执行存储过程SQL SERVER系统中,可以使用EXECUTE语句执行存储过程。
EXECUTE语句也可以简写为EXEC。
如果将要执行的存储过程需要参数,那么应该在存储过程名称后面带上参数值。
[EXEC[UTE]]{[@RETURN_STATUS=]{PROCEDURE_NAME[;NUMBER]|@PROCEDURE_NAME_VAR}[@PARAMETER={VALUE|@VARIABLE[OUTPUT]|[DEFAULT]}[,…N](3) 删除存储过程使用DROP PROCEDURE语句可永久地删除存储过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--(一)存储过程
--1、.对学生课程数据库,编写三个存储过程,分别完成下面功能:
--1)统计某一门课的成绩分布情况,即按照各分数段统计人数。
use StuDB
go
create procedure tongji
as
select cno,count(case when grade<60 then 1 end)不及格,
count(case when
grade<70 and grade>=60 then1 end)及格,
count(case when
grade<80 and grade>=70 then1 end)中,
count(case when
grade<90 and grade>=80 then1 end)良,
count(case when
grade<=100 and grade>=90 then 1 end)优
from sc
group by cno
go
exec tongji
go
--2)将学生选课成绩从百分制改为等级制(即A、B、C、D、E五级)。
create procedure dengji
as
select sc.*,等级评价=
case
when grade<60 then'E'
when grade>=60 and grade<70 then'D'
when grade>=70 and grade<80 then'C'
when grade>=80 and grade<90 then'B'
when grade>=90 and grade<=100 then'A'
end
from sc
go
exec dengji
go
--2、对SPJ数据库,创建一个存储过程
ins_s_count,功能为根据提供的供应商号,供应商名,供应商所在地等信息,
--往S表中插入数据,并返回插入该记录之
后,S表中的记录数。
--调用该存储过程实现往S表中插入一条记录(‘S6’,’天盛’,‘’‘福州’),并显示插入该记录之后,S表中的记录数。
use spj
go
alter procedure ins_s_count
@sno varchar(20),@sname
varchar(40),@status int,@city varchar(20)
as
select*
from s
insert
into
s(sno,sname,status,city)
values(@sno,@sname,@status,@cit y)
select count(sno)
from s
go
exec ins_s_count 'S6','天盛',40,'福州'
--3、查看存储过程的定义和内容
exec sp_helptext ins_s_count
--4、调用存储过程
--(二)用户自定义函数
--1. 创建一个返回标量值的用户定义函数RectangleArea:
--输入矩形的长和宽就能计算矩形的面积。
自选种实例调用该函数。
create function
RectangleArea(@long int,@wide int)
returns int
begin
return @long*@wide
end
select dbo.RectangleArea(5,2) --2. 创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。
--该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。
--调用这个函数,生成相应的报表并给用户浏览。
create function baobiao() returns table
as
return(select o 课程号,cname 课程名,count(o)选修人数,max(grade)最高
分,min(grade)最低分,
avg(grade)平均分
from sc,course
where o=o
group by o,cname) select*
from baobiao()。