实验八 存储过程
oracle实验--存储过程

实验八存储过程的使用一、实验目的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表:insert into borrow values(112,445501,'19-3月-2006');insert into borrow values(125,332211,'12-2月-2006');insert into borrow values(111,445503,'21-8月-2006');insert into borrow values(112,112266,'14-3月-2006');insert into borrow values(114,665544,'21-10月-2006');insert into borrow values(120,114455,'02-11月-2006');insert into borrow values(120,118801,'18-10月-2006');insert into borrow values(119,446603,'12-11月-2006');insert into borrow values(112,449901,'23-10月-2006');insert into borrow values(115,449902,'21-8月-2006');insert into borrow values(118,118801,'10-9月-2006');完成以下各题:1、创建一个不带参数据的存储过程,统计并输出2006年每个月份的图书借出的册数。
创建存储过程实验报告(3篇)

第1篇一、实验名称:创建存储过程实验二、实验日期:2024年X月X日三、实验目的:1. 掌握MySQL存储过程的创建方法。
2. 理解存储过程的作用和优势。
3. 学习如何使用存储过程简化数据库操作。
4. 提高数据库编程能力。
四、实验环境:- 硬件:PC电脑一台,内存2G及以上,硬盘250G及以上。
- 软件环境:Windows操作系统,MySQL5.7或MySQL8.0.20数据库。
五、实验内容:本次实验主要围绕创建存储过程展开,具体包括以下内容:1. 创建一个查询商品信息的存储过程。
2. 创建一个插入部门信息的存储过程,并处理主键重复问题。
3. 调用存储过程进行测试。
六、实验步骤及方法:1. 创建查询商品信息的存储过程(1)首先,创建一个名为`spxx_query`的存储过程,用于查询商品编号、名称、所属类别及价格。
```sqlDELIMITER //CREATE PROCEDURE spxx_query(IN category VARCHAR(50))BEGINSELECT spxx.bh, spxx.mc, spxx.sl, spxx.jgFROM spxxWHERE spxx.sl = category;END //DELIMITER ;```(2)在存储过程中,使用`IN`参数接收用户输入的商品所属类别,并查询对应类别的商品信息。
2. 创建插入部门信息的存储过程(1)首先,创建一个名为`bmxx_insert`的存储过程,用于向`bmxx`表中插入一条数据。
```sqlDELIMITER //CREATE PROCEDURE bmxx_insert(IN bmbh VARCHAR(50), IN bmmc VARCHAR(50))BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGININSERT INTO splog(bmbh, bmmc, rlsj, czbz)VALUES (bmbh, bmmc, CURDATE(), 'insert');END;INSERT INTO bmxx(bmbh, bmmc)VALUES (bmbh, bmmc);END //DELIMITER ;```(2)在存储过程中,使用`IN`参数接收用户输入的部门编号和名称,并尝试将数据插入`bmxx`表中。
储存过程实验报告

一、实验背景随着数据库技术的不断发展,数据库管理系统(DBMS)的功能日益强大,存储过程作为一种重要的数据库对象,在数据库应用中扮演着越来越重要的角色。
存储过程能够封装复杂的业务逻辑,提高数据库性能,增强数据安全性。
本实验旨在通过实际操作,掌握存储过程的创建、执行和管理方法,提高数据库应用开发能力。
二、实验目的1. 理解存储过程的概念和作用。
2. 掌握存储过程的创建、执行和管理方法。
3. 学会使用存储过程优化数据库性能。
4. 提高数据安全性。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 编程语言:MySQL四、实验内容1. 创建存储过程2. 调用存储过程3. 管理存储过程4. 优化存储过程性能五、实验步骤1. 创建存储过程(1)创建一个名为“get_user_info”的存储过程,用于查询用户信息。
```sqlDELIMITER //CREATE PROCEDURE get_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 username VARCHAR(50), IN email VARCHAR(100))BEGINUPDATE users SET username = username, email = email WHERE id = user_id;END //DELIMITER ;```2. 调用存储过程(1)调用“get_user_info”存储过程查询用户信息。
```sqlCALL get_user_info(1);```(2)调用“update_user_info”存储过程更新用户信息。
存储过程的使用 实验报告

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最高成绩,
实验8 存储过程和触发器

实验8 存储过程和触发器一、实验目的1.掌握通过企业管理器和Transact —SQL语句和CREATE PRODCEDURE创建存储过程的方法和步骤。
2.掌握使用企业管理器和Transact —SQL语句和EXECUTE执行存储过程的方法。
3.掌握通过企业管理器和Transact —SQL语句CREATE TRIGGER创建触发器的方法和步骤。
4.掌握引发存储器的方法。
5.掌握使用系统存储过程管理存储过程和触发器的方法。
6.掌握事物,命名事物的创建方法,不同类型的事务的处理情况。
二、实验准备1.了解存储过程的基本概念和类型。
2.了解创建存储过程的Transact —SQL语句的基本语法。
3.了解查看、执行、修改和删除存储过程的基本语法。
4.了解触发器的基本概念和类型。
5.了解创建触发器的Transact —SQL语句基本用法。
6.了解查看、修改和删除触发器的Transact —SQL语句的用法。
7.了解创建事务,处理事务的方法和过程。
8.了解锁机制。
三、实验内容和步骤1.在查询分析器中输入以下代码,创建一个利用流控制语句的存储过程lletters_print,该存储器能显示26个小写字母。
单击查询分析器的“执行查询”按钮,查看studentsdb数据库的存储过程是否有letters_print.使用EXECUTE命令执行letters_print存储过程。
CREATE PROCEDURE letter_printASDECLARE @count intSET @count=0WHILE @count<26BEGINPRINT CHAR(ASCII(‘a’)+@count)SET @count =@count +1ENDEXEC letter_print输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。
使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。
存储过程与触发器实验报告

存储过程与触发器实验报告一、引言存储过程和触发器是数据库中常用的高级功能,它们能够提高数据库的性能、数据一致性和安全性。
本实验报告将详细介绍存储过程和触发器的概念、用途以及实际应用。
二、存储过程2.1 概念存储过程是一组预定义的SQL语句集合,它们被命名并存储在数据库中,可以作为一个单元来调用和执行。
存储过程可以接受参数,并返回一个或多个结果集。
存储过程可以在应用程序层面减少网络传输,提高数据库性能。
2.2 用途存储过程的应用非常广泛,主要用于以下几个方面: 1. 数据库业务逻辑封装:将复杂的业务逻辑封装到存储过程中,使应用程序只需调用存储过程而不需要编写大量的SQL语句,简化应用程序的开发。
2. 数据库性能优化:通过存储过程可以减少网络传输,提高数据库性能。
3. 数据库安全性:通过存储过程,可以实现对数据库的访问权限控制,提高数据库的安全性。
2.3 示例下面以一个简单的示例来说明存储过程的使用。
2.3.1 创建存储过程CREATE PROCEDURE `get_employee_by_department` (IN department_id INT)BEGINSELECT * FROM employee WHERE department_id = department_id;END2.3.2 调用存储过程CALL `get_employee_by_department`(1);2.4 优化技巧为了进一步提高存储过程的性能,可以采用以下优化技巧: 1. 减少存储过程的参数:过多的参数会增加网络传输的负担,应尽量减少存储过程的参数数量。
2. 避免长时间占用资源:存储过程应尽量快速执行,避免长时间占用数据库资源。
三、触发器3.1 概念触发器是与表相关联的特殊类型的存储过程,它在表的数据发生变化时自动执行。
触发器可以监视INSERT、UPDATE或DELETE等操作,并在这些操作发生时自动触发执行一段预定义的代码。
Experiment 08 存储过程的基本操作

例8-2:创建带输入的存储过程,根据学生学 号(sno)查询该学生所学课程的课程编号和成 绩。 Delimiter // Create procedure procScFindById( in n int) Begin select sno,cno,grade from sc where sno = n; End //
8.2 修改存储过程
Alter procedure 存储过程名 SQL语句代码块
8.3 删除存储过程
Drop procedure if exists 存储过程名;
例
例8-3:删除例8-2创建的存储过程
Drop procedure if exists procScFindById;
8.4 查看存储过程
8.6 调用存储过程
Call spName( [parameter] );
例8-6:调用例8-1中创建的simpleproc存储过 程
Call simpleproc( @count ); Select @count;
Show create procedure 存储过程名;
例8-4:查看8-1创建的存储过程 Show create procedure simpleproc;
8.5 列出所有存储过程
Show procedure status;
例8-5:查看jxglБайду номын сангаас创建的所有存储过程 Show procedure status;
Experiment 08 存储过程的基本操作
8.1 创建存储过程
Create procedure 存储过程名(参数列表) Begin SQL 语句代码块 end
例
例8-1:创建带输出参数的存储过程,求学生 人数。 Delimiter // Create procedure simpleproc(out param1 int) Begin select count(*) into param1 from student; End//
实验八 存储过程

执行结果: (2)编辑存储过程stu_pr,将该过程改为查询051班男生的所有资料。 基本步骤:
(3)删除存储过程stu_pr。 基本步骤:
2)创建一执行该存储过程的批处理,要求当总成绩当总成绩小于100时,显示信息为:某课 程名+“的总成绩为:“+总成绩,其总分未达100分。 大于100时,显示信息为:某课程名+“的总成绩为:“+总成绩。 T-SQL语句为:
(4)创建一个名为student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成
绩。(学号起始号与终止号在调用时输入,可设默认值)。 T-SQL语句为:
执行该存储过程的语句为:(试用多个语句进行测试) (5)创建带重编译及加密选项的存储过程
创建一个名为update_sc,并带重编译及加密选项的存储过程,可更新某号、某课程号 的学生的课程成绩。(学号、课程号由调用时输入) T-SQL语句:
执行存储过程的语句:
(2)创建带参数的存储过程 创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,
选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。 T-SQL语句:
执行存储过程的语句(用多种情况加以测试):
(3)创建带输出参数的存储过程 1)创建一个名为course_sum的存储过程,可查询某门课程考试的总成绩、考生人数。 总成绩可以输出,进一步加调用。 T-SQL语句:
(3)删除存储过程 将存储过程stu_pr删除掉。 T-SQL语句:
存储过程操作实验报告

一、实验模块数据库原理与应用二、实验标题存储过程操作实验三、实验内容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的存储过程

2、难点: MySQL 的分隔符定义 存储过程的创建 带参数的存储过程调用。
四、仪器设备及用具
硬件:投影仪、每位同学分配已连接校园网 PC 机一台。 软件:本机已安装 MySQL 5.5 数据库平台。
五、教学过程
本次实验了解 MySQL 存储过程的创建、修改和删除的方法和步骤,掌握在 Navicat for MySQL 中对存储过程的进行创建、修改和删除,掌握在 MySQL Command Line Client 中调用带参数和不带参数的存储过程。
二、实验要求
1、实验前:预习实验内容,学习相关知识。 2、实验中:按照实验内容要求进行实验,实验时注意每种 SQL 语句的基本命令 及各个关键字的含义,做好实验记录。 3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。 4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向 教师或同学请教。 5、要求按指定格式书写实验报告,且报告中应反映出对本次实验的总结,下次 实验前交实验报告。
实验八 MySQL 的存储过程
一、实验目的
存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。 存储过程分为两类:1.系统提供的存储过程;2.用户自定义存储过程。
存储过程具有的优点:1.存储过程允许标准组件式编程;2.存储过程能够实 现较快的执行速度;3.存储过程能够减少网络流量;4.存储过程可被作为一种安 全机制来充分利用。存储过程是可复用的组件!想象一下如果你改变了主机的语 言,这对存储过程不会产生影响,因为它是数据库逻辑而不是应用程序。存储过 程是可以移植的!
图 8-4 点击查询->新建查询,输入如下语句,创建示例表和插入演示数据: CREATE TABLE cqupt (s1 INTEGER); INSERT INTO cqupt VALUES (5);
实验存储过程实验报告

一、实验目的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. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。
SQLServer实验指导NEW实验存储过程

实验8 存储过程
3.SQL Server 2000 应用程序
在使用 SQL Server 2000 创建应用程序时,Transact-SQL 编程语言 是应用程序和 SQL Server 数据库之间的主要编程接口。使用 Transact-SQL 程序时,可用 两种方法存储和执行程序:
(1)在本地(客户端)创建并存储程序,把此程序发送给 SQL Server 执行;
(1)执行Create Procedure语句,必须是系统管理员、数据库拥有者或数 据定义语言管理员角色中的一个成员,或被授予 Create Procedure 权限。 (2)创建过程者一定拥有过程中所引用的所有对象的权限: UPDATE、 INSERT、DELETE、SELECT (3)若过程拥有者把执行此过程的权限授予某用户,那么此用户就拥有此 过程的执行权限。
实验8.1 创建并执行存储过程
(2)执行存储过程Pro_Qsinf。查询并显示出默认学号(即S2)和学号为S4 学生的姓名和年龄。
执行存储过程查询S2和S4学生信息
实验8.1 创建并执行存储过程
2.用SQL创建一存储过程 (1)创建存储过程Pro_Qscore :通过学生姓名和课程名查询该生该课程的 成绩。 (2)执行存储过程Pro_Qscore。查询并显示学生“李思”的“程序设计” 课程的成绩。
实验8 存储过程
5.创建存储过程的SQL语句
CREATE PRO拥有C者E.D][ 存U储R过E程[名][;程序编号] [{ @参数名 数据类型 } [ VARYING默]认[ 值=][ OUTPUT ]] [,… n ] [WITH {RECOMPILE | ENCR,YEPNCTRYIPOTINON}| ]RECO
删除存储过程命令
存储过程与触发器实验报告

存储过程与触发器实验报告本实验旨在探究存储过程与触发器的概念、作用、使用范围和创建过程,并且通过编写相关的示例代码来展示它们的实际应用。
一、实验原理1. 存储过程存储过程是一组预定义好的 SQL 语句,可以重复使用并且可以直接被调用。
它类似于程序中的函数,可以接受参数、返回值、流程控制等。
2. 触发器触发器是与数据库表相关的事件响应机制,可以在数据库表上定义一些触发条件,当满足这些条件时就会触发执行一些操作,比如插入、更新或删除数据。
二、实验步骤1. 存储过程的创建与使用(1)创建一个用于统计某个用户的订单数量的存储过程。
```DELIMITER //CREATE PROCEDURE `getOrderCount`(IN p_userid INT, OUTp_count INT)BEGINSELECT COUNT(*) INTO p_count FROM orders WHERE user_id = p_userid;END//DELIMITER ;```(2)调用这个存储过程,并输出结果。
```CALL getOrderCount(123, @count);SELECT @count AS 'order_count';```2. 触发器的创建与使用(1)创建一个在用户表中插入新记录时自动生成一个账户记录的触发器。
```DELIMITER //CREATE TRIGGER `insert_user_account` AFTER INSERT ON `users` FOR EACH ROWBEGININSERT INTO accounts (user_id, balance) VALUES (NEW.id, 0);END//DELIMITER ;```(2)在用户表中插入一条新记录,触发器会自动执行并在账户表中生成一条新记录。
```INSERT INTO users (name, email) VALUES ('Alice','***************');SELECT * FROM accounts WHERE user_id =LAST_INSERT_ID();```三、实验结论通过实验我们发现,存储过程可以将一些常用的 SQL 语句封装为一个可以重复调用的函数,使得程序更加简洁和高效。
存储过程实验报告_总结(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`语句。
实验八存储过程与触发器的应用实验报告

实验八:存储过程与触发器的应用实验报告实验任务:1、存储过程的创建、执行和删除。
(1)使用学生选课数据库中的student 表、course 表;sc 表创建一个带参数的存储过程—cjjicx 。
该存储过程的作用是:该存储过程的作用是:当任意输入一个学生的姓名时,当任意输入一个学生的姓名时,当任意输入一个学生的姓名时,将从三个表中返回该学生的学号、将从三个表中返回该学生的学号、将从三个表中返回该学生的学号、选选修的课程名称和课程成绩。
Cjjicx 的创建语句:create procedure [dbo].[cjjicx]@sname nchar (1010) ) asselect s .sno ,c .cname ,sc .gradefrom student as s inner join sc as sc on s .sno =sc .sno inner join course as c on c .cno =sc .cno wheresname =@sname(2)执行cjjicx 存储过程,查询“XXX XXX””(自己选个名字)的学号、选修课程和课程成绩。
执行语句:execute cjjicx '李勇'结果描述:(3)使用系统存储过程sp_helptext查看存储过程cjjicx的文本信息。
使用系统存储过程sp_depends查看存储过程cjjicx中所涉及的对象信息。
中所涉及的对象信息。
执行语句:执行语句:(i)EXEC sp_helptext cjjicx(ii)EXEC sp_depends cjjicx查看结果描述:查看结果描述:(i)(ii)(4)使用学生选课数据库中的student表,为其创建一个存储过程—jmxs。
该存储过程的作用是:当执行该存储过程时,将返回计算机系学生的所有信息。
是:当执行该存储过程时,将返回计算机系学生的所有信息。
Jmxs创建语句:创建语句:CREATE PROCEDURE jmxsASSELECTStudent.Sno,Student.Sname,Student.Ssex,Student.Sage,Student.Sdept FROM StudentWHERE Sdept='CS'GO结果描述:存储过程jmxs已成功建立:右侧“系统存储过程”下拉列表中显示(5)执行jmxs存储过程,查看计算机系学生的情况。
存储过程的实验报告

一、实验目的1. 理解存储过程的概念和作用。
2. 掌握存储过程的创建、调用和修改方法。
3. 学会使用存储过程进行数据查询、插入、更新和删除等操作。
4. 熟悉存储过程中的流程控制语句和常用函数。
二、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 实验工具:MySQL Workbench三、实验内容1. 创建一个名为“dept”的表,包含以下字段:deptno(部门编号)、dname(部门名称)、loc(部门位置)。
```sqlCREATE TABLE dept (deptno INT PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50));```2. 创建一个名为“emp”的表,包含以下字段:empno(员工编号)、ename(员工姓名)、job(职位)、mgr(上级编号)、hiredate(入职日期)、sal(工资)、comm(佣金)、deptno(部门编号)。
```sqlCREATE TABLE emp (empno INT PRIMARY KEY,ename VARCHAR(50),job VARCHAR(50),mgr INT,hiredate DATE,sal DECIMAL(10, 2),comm DECIMAL(10, 2),deptno INT,FOREIGN KEY (deptno) REFERENCES dept(deptno));```3. 创建一个名为“dept_info”的存储过程,用于查询部门信息和员工信息。
```sqlCREATE PROCEDURE dept_info(IN deptno_input INT)BEGINSELECT d.dname, e.ename, e.job, e.hiredateFROM dept dJOIN emp e ON d.deptno = e.deptnoWHERE d.deptno = deptno_input;END;```4. 创建一个名为“add_dept”的存储过程,用于向“dept”表中插入一条新部门信息。
数据库原理实验报告

计算机与信息学院数据库原理实验报告专业:计算机科学与技术班级:2012级本科班学号:*****姓名:指导教师:2014年06月18 日实验项目列表计算机与信息学院实验报告纸实验一数据库创建与管理一、实验目的与要求1、熟练掌握SSMS中界面方式创建和管理数据库。
2、熟练掌握SSMS查询编辑器T-SQL语句创建和管理数据库。
3、熟练掌握备份和还原数据库。
二、实验内容1、界面方式创建和管理数据库(1)创建数据库(2)修改数据库(3)删除数据库2、利用企业管理器备份和还原数据库(1)备份数据库(2)还原数据库3、T-SQL语句方式创建和管理数据库(1)创建SPJ数据库:在SSMS中“新建查询”,输入以下语句并运行CREATE DATABASE SPJON(NAME=’SPJ_Data’,FELENAME='C:\Program Files\Microsoft SQL Server\MSSQL\data\SPJ_Data.MDF' ,SIZE = 3,MAXSIZE = 10,FILEGROWTH = 10%)LOG ON(NAME = 'SPJ_Log', FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL\data\SPJ_Log.LDF' ,SIZE = 1,FILEGROWTH = 10%)(2)修改SPJ数据库:在查询分析器中输入以下语句并运行ALTER DATABASE SPJMODIFY FILE(NAME='SPJ_Data',SIZE=4,ALTER DATABASE SPJADD FILE(NAME='SPJ_Data_2', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL\Data\SPJ_Date_2.ndf',SIZE=1,MAXSIZE=10,FILEGROWTH=10%)(3)删除SPJ数据库:DROP DATABASE SPJ4、界面方式创建数据库XSBOOK,写出操作过程。
存储过程实验报告

一、实验目的1. 了解存储过程的概念、作用和优势。
2. 掌握存储过程的创建、修改、删除和调用方法。
3. 学会使用存储过程实现复杂的数据操作和业务逻辑。
4. 熟悉存储过程的性能优化和安全性考虑。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 8.03. 开发工具:MySQL Workbench三、实验内容1. 创建存储过程2. 调用存储过程3. 修改和删除存储过程4. 存储过程的嵌套和递归5. 存储过程的性能优化6. 存储过程的安全性考虑四、实验步骤1. 创建数据库和表```sqlCREATE DATABASE experiment_db;USE experiment_db;CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,gender ENUM('male', 'female'));CREATE TABLE courses (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),credit INT);```2. 创建存储过程```sql-- 创建一个存储过程,用于查询学生姓名和年龄DELIMITER //CREATE PROCEDURE GetStudentInfo(IN student_id INT) BEGINSELECT name, age FROM students WHERE id = student_id; END //DELIMITER ;```3. 调用存储过程```sqlCALL GetStudentInfo(1);```4. 修改存储过程```sql-- 修改存储过程,增加查询性别DELIMITER //CREATE PROCEDURE GetStudentInfo(IN student_id INT)BEGINSELECT name, age, gender FROM students WHERE id = student_id; END //DELIMITER ;```5. 删除存储过程```sqlDROP PROCEDURE IF EXISTS GetStudentInfo;```6. 存储过程的嵌套和递归```sql-- 创建一个递归存储过程,用于计算阶乘DELIMITER //CREATE PROCEDURE Factorial(IN n INT, OUT result INT)BEGINIF n = 1 THENSET result = 1;ELSESET @result = n;CALL Factorial(n - 1, @result);SET result = n @result;END IF;END //DELIMITER ;```7. 存储过程的性能优化- 使用合适的索引- 减少不必要的数据访问- 优化SQL语句8. 存储过程的安全性考虑- 使用参数化查询,防止SQL注入攻击- 限制存储过程的权限- 使用加密技术保护敏感数据五、实验结果与分析1. 创建存储过程:成功创建了GetStudentInfo存储过程,并能够查询到指定学生的姓名和年龄。
实验报告8 创建和使用存储过程

山西大学计算机与信息技术学院实验报告姓名许小珍学号2010242097 专业班级软件一班课程名称数据库实验日期2012.05.22 成绩指导教师庞继芳批改日期实验名称创建和使用存储过程一、实验目的:(1)了解存储过程的概念和作用;(2)掌握存储过程的创建、执行以及查看、修改和删除.二、实验内容:(1)存储过程的创建与执行;(2)存储过程的查看、修改与删除.三、实验步骤:1.使用SQL命令窗口创建存储过程(1)打开SQL Server Management Studio,选择“对象资源管理器”中的“学生数据库”,然后用鼠标单击“新建查询”按钮,打开SQL命令窗口,在可编辑区输入如下代码,单击“执行”按钮即可创建存储过程,1.为student表创建查询所有信息的存储过程,不带参数create procedure stu1as select*from studentexec stu12.创建一个不带参数的存储过程,从Course中选择所有“Grade>85”的记录,输入如下语句,单击“执行”,create proc getstudent1as select*from scwhere grade>'85'exec getstudent13.创建一个带参数的存储过程,从Course中选择Grade介于65—89之间的记录,输入如下语句,单击“执行”,create proc student2@min int, @max intas select* from sc where grade between @min and @maxstudent2 65 , 89declare@min int,@max intexec student2 65 ,894.创建与执行带输入、输出参数的存储过程,实现显示“Course”中给定学号的信息,并输出“Course”中该学号的学生所选课程中的最高分数和最低分数,create proc student3@sno varchar(20),@max int output,@min int outputas select*from sc where sno=@snoselect @max=max(grade) from sc where sno=@snoselect @min=min(grade) from sc where sno=@snodeclare@x1 int, @x2 intexec student3 '200215122',@x1 output,@x2 outputselect @x1 as最高分, @x2 as最低分2.查看存储过程(1)使用Mircrosoft SQL Server 2005 Management Studio查看用户创建存储过程。
实验八存储过程、存储函数和触发器

《MySQL数据库应用》实验指导实验八存储过程、存储函数和触发器一、实验目的1、掌握存储过程创建和调用的方法;2、掌握存储函数创建和调用的方法;3、掌握游标的使用方法;4、掌握触发器的使用方法;5、掌握事件的创建和使用方法。
二、实验学时2学时三、实验类型验证性四、实验需求1、硬件每位学生配备计算机一台:Pentium III以上处理器,2G或以上内存,2G或以上硬盘空间。
2、软件Windows操作系统,安装MySQL Community Server软件。
3、网络局域网环境。
4、工具无。
五、实验理论与预备知识1、了解存储过程中允许sql语句类型和参数的定义方法;语法格式:CREATE PROCEDURE存储过程名([过程参数...])[特征...]存储过程体2、了解存储过程的调用方法;语法格式:CALL存储过程名([参数...]3、了解存储函数的定义和调用方法;语法格式:CREATE FUNCTION存储过程名([参数...])RETURNS type[特征...]存储函数体存储函数的调用:SELECT存储函数名([参数[,...]])4、了解触发器的作用和使用方法;语法格式:CREATE TRIGGER触发器名触发时刻触发事件ON表名FOR EACH ROW触发器动作5、了解游标的使用方法。
语法格式:声明游标DECLARE游标名CURSOR FOR select语句打开游标OPEN游标名读取数据FETCH游标名INTO变量名...关闭游标CLOSE游标名六、实验内容与结果以数据库user_db及数据表student、teacher、class、course、sc为基础(数据表及相关表数据来源于实验三),请将实现功能的SQL语句填写到实验报告册;1、创建user_db数据库的存储过程,判断两个输入的参数哪一个更大,并调用这个存储过程。
2、在user_db数据库中的sc表中增加一列学分credit,然后创建一个存储过程,有两个输入参数:stu_id和cou_id,要求当某学生某门课程的成绩小于60分时将其学分修改为零,大于等于60分时将学分修改为此课程的学分,并调用这个存储过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八存储过程
【实验目的】
1、理解存储过程、函数基本概念。
2、掌握Oracle存储过程与函数定义、调用、删除。
3、了解存储过程、函数调试。
4、理解存储过程、函数作用。
【实验性质】
综合性实验
【实验学时】
2H
【实验内容】
1、定义、调用简单存储过程:计算所有供应商供应零件总数量并修改供应商相关列sqty(其中S表增加一列供应零件总数量sqty默认值为0)。
(10分)
create or replace procedure proc_no1
as
cursor cur_spj is select sno,sum(qty) sumqty from spj group by sno; begin
for rec in cur_spj loop
update s set sqty=rec.sumqty where sno=rec.sno;
end loop;
end;
begin
proc_no1;
commit;
end;
select * from s;
2、定义、调用参数存储过程:查询返回指定供应商的供应零件总数量。
(15分)
create or replace procedure proc_no2(p_sno in s.sno%type,p_qty out s.sqty%type)
as
begin
select sqty into p_qty from s where sno=p_sno;
end;
declare
v_sno s.sno%type:='S1';
v_qty s.sqty%type;
begin
dbms_output.put_line('供应商S1总数量'||v_qty);
end;
3、定义、调用参数函数:查询返回指定供应商的供应零件总数量。
(10分)
create or replace function fun_no3(p_sno in s.sno%type) return integer as
p_qty s.sqty%type;
begin
select sqty into p_qty from s where sno=p_sno;
return p_qty;
end;
declare
v_sno s.sno%type:='S1';
v_qty s.sqty%type;
begin
v_qty:=fun_no3(v_sno);
dbms_output.put_line('供应商S1总数量'||v_qty);
end;
4、定义、调用存储过程:插入一个供应商信息(所有信息由参数提供)。
(20分)
create or replace procedure proc_no4(p_sno in s.sno%type,p_sname in s.sname%type,p_status in s.status%type,p_city in s.city%type)
as
begin
insert into s(sno,sname,status,city)
values(p_sno,p_sname,p_status,p_city);
end;
declare
p_sno s.sno%type:='S6';
p_sname s.sname%type:='汽院';
p_status s.status%type:=20;
p_city s.city%type:='十堰';
begin
proc_no4(p_sno,p_sname,p_status,p_city);
end;
select * from s;
5、定义、调用存储过程:删除指定代码的零件信息,并给出删除元组数。
(20分)
create or replace procedure proc_no5(p_pno p.pno%type,p_count out number)
as
begin
delete from p where pno=p_pno;
p_count:=SQL%ROWCOUNT;
end;
declare
p_pno p.pno%type:='&pno';
p_count number;
begin
proc_no5(p_pno,p_count);
dbms_output.put_line('删除元组数量'||p_count);
end;
6、定义、调用存储过程:修改指定代码项目的其它信息(所有信息由参数提供)。
(20分)
create or replace procedure proc_no6(p_jno in j.jno%type,p_jname in j.jname%type,p_city in j.city%type)
as
p_count int:=0;
begin
select count(*) into p_count from j where jno=p_jno;
if (p_count>0) then
update j set jname=p_jname,city=p_city where j.jno=p_jno;
end if;
end;
declare
p_jno j.jno%type:='J1';
p_jname j.jname%type:='汽院';
p_city j.city%type:='十堰';
begin
proc_no6(p_jno,p_jname,p_city);
end;
select * from j;
【实验总结】
请根据实验内容谈谈你对本次实验的收获、感想,或提出你对实验内容的建议等等。
(5分)
本次实验中,主要动手实践了如何定义和调用存储过程,其中同样运用到了游标和分组,以及使用变量,在存储过程中的删除,更新,插入对于老师讲过的情况下,跟着做都不难,就是要细心点,要知道其中begin和end要搭配,declare 是声明变量。