实验6 游标与存储过程

实验6 游标与存储过程
实验6 游标与存储过程

实验6:游标与存储过程

6.1 实验目的与要求

(1) 掌握游标的定义和使用方法。

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

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

6.2 实验案例

下面以简单实例介绍游标的具体用法。

[例6.1] 利用游标选取业务科员工的编号、姓名、性别、部门和薪水字段,并逐行显示游标中的信息。

DECLARE SCROLL cur_emp CURSOR FOR

SELECT employeeno, employeename, sex, department, salary

FROM employee

WHERE department='业务科'

ORDER BY employeeno /*定义游标*/

OPEN cur_emp /*打开游标*/

SELECT 'CURSOR内数据条数'=@@cursor_rows /*显示游标内记录的个数*/

FETCH NEXT FROM cur_emp /*逐行提取游标中的记录*/

WHILE (@@FETCH_status<>-1) /*判断FETCH语句是否执行成功*/

BEGIN

SELECT 'cursor读取状态'=@@FETCH_status/*显示游标的读取状态*/

FETCH NEXT FROM cur_emp/*提取游标下一行信息*/

END

CLOSE cur_emp/*关闭游标*/

DEALLOCATE cur_emp/*释放游标*/

本例中,@@cursor_rows是返回连接上最后打开的游标中当前存在的合格行的数量。具体参数信息见表6-1所示。

@@FETCH_status是返回被FETCH语句执行的最后,而不是任何当前被连接打开的游标的状态。具体参数见表6-2所示。

表6-2 @@FETCH_status参数返回值的描述表

[例6.2] 利用游标选取业务科员工的编号、姓名、性别、部门和薪水字段,并以格式化的方式输出游标中的信息。

DECLARE @emp_no char(8), @emp_name char(10), @sex char(1), @dept char(4)

DECLARE @salary numeric(8,2),@text char(100) /*用户自定义的几个变量*/

DECLARE SCROLL emp_cur CURSOR FOR

SELECT employeeNo, employeeName, sex, department, salary

FROM Employee

WHERE department='业务科'

ORDER BY employeeNo /*定义游标*/

SELECT @text='========业务科员工情况列表==========='

PRINT @text

SELECT @text=' 编号姓名性别部门薪水'

PRINT @text

SELECT @text='----------------------------------'

PRINT @text /*按照用户要求格式化输出相关信息*/

OPEN emp_cur/*打开游标*/

FETCH emp_cur INTO @emp_no, @emp_name, @sex, @dept, @salary

/*提取游标中的信息传递并分别给内存变量*/

WHILE (@@FETCH_status=0) /*判断是否提取成功*/

BEGIN

SELECT @text=@emp_no+' '+@emp_name+' '+@sex+' '+

@dept+' '+convert(char(10), @salary) /*给@tex t赋字符串值*/

PRINT @text /*打印字符串值*/

/*提取游标中的信息传递并分别给内存变量*/

FETCH emp_cur into @emp_no, @emp_name, @sex, @dept, @salary

END

CLOSE emp_cur/*关闭游标*/

DEALLOCATE emp_cur/*释放游标*/

本例中,主要结合SELECT和PRINT命令将创建游标后逐行提取游标的信息以格式化的方式输出,这就提高了脚本的可读性。

[例6.3] 不带参数的存储过程:利用存储过程计算出’E0014’业务员的销售总金额。

①创建存储过程

CREATE PROCEDURE sales_tot1

AS

SELECT sum(orderSum)

FROM OrderMaster

WHERE salerNo='E2005002'

②执行存储过程

EXEC sales_tot1

上述操作能够统计业务员'E2005002'的销售业绩,但执行此存储过程不能统计任一业务员的销售业绩。

[例6.4] 带输入参数的存储过程:统计某业务员的销售总金额。

①创建存储过程

CREATE PROCEDURE sales_tot2 @e_no char(8)

AS

SELECT sum(orderSum)

FROM OrderMaster

WHERE salerNo=@e_no

②执行存储过程

EXEC sales_tot2 'E2005003'

注:程序中使用@符号表示一个变量来指定参数名称,且每个过程的参数仅用于该过程本身。

上述操作只要在执行存储过程时添加输入参数(即被统计的业务员的编号)就能统计任一业务员的销售业绩。但是任一业务员的销售总金额如何被其他用户/程序方便调用呢?

[例6.5] 带输入/输出参数的存储过程:统计某业务员的销售总金额并返回其结果。

①创建存储过程

CREATE PROCEDURE sales_tot3 @E_no char(8), @p_tot int OUTPUT

AS

SELECT @p_tot=sum(orderSum)

FROM OrderMaster

WHERE salerNo=@E_no

②执行存储过程

DECLARE @tot_amt int

EXEC sales_tot3 'E2008003', @tot_amt OUTPUT

SELECT 销售总额=@tot_amt

上述操作可以统计任一员工的销售业绩并能实现其结果的调用。

[例6.6] 带通配符参数的存储过程(模糊查找):统计所有姓陈的员工的销售业绩并输出他们姓名和所在部门。

①创建存储过程

Create Procedure emp_name@E_name varchar(10)

AS

SELECT a.EmployeeName, a.department, ssum

FROM Employee a, ( SELECT SalerNo, ssum=sum(OrderSum)

FROM OrderMaster

GROUP BY SalerNo) b

WHERE a.EmployeeNo=b.SalerNo AND a.EmployeeName LIKE @E_name

②执行存储过程

EXEC emp_name@E_name='陈%'

[例6.7] 重命名存储过程:将存储过程销售总额改名为sale_tot。

ALTER PROCEDURE 销售总额RENAME TO sale_tot

[例6.8] 删除存储过程:将存储过程sale_tot删除。

DROP PROCEDURE sale_tot

[例 6.9] 游标和存储过程的综合应用:请使用游标和循环语句编写一个存储过程emp_tot,根据业务员姓名,查询该业务员在销售工作中的客户信息及每一客户的销售记录,并输出该业务员的销售总金额。

①创建存储过程

CREATE PROCEDURE emp_tot@v_emp_name char(10)

AS

BEGIN

DECLARE @sv_emp_name varchar(10), @v_custname varchar(10), @p_tot int

DECLARE @sum int, @count int, @order_no varchar(10)

SELECT @sum=0, @count=0

DECLARE get_tot CURSOR FOR

SELECT EmployeeName, CustomerNo, b.OrderNo, OrderSum

FROM Employee a, OrderMaster b

WHERE a.EmployeeName=@v_emp_name AND a.EmployeeNo=b.SalerNo

OPEN get_tot

FETCH get_tot INTO @sv_emp_name, @v_custname, @order_no, @p_tot

WHILE (@@FETCH_status=0)

BEGIN

SELECT业务员=@sv_emp_name,客户=@v_custname,

订单编号=@order_no,订单金额=@p_tot

SELECT @sum=@sum+@p_tot

SELECT @count=@count+1

FETCH get_tot INTO @sv_emp_name, @v_custname, @order_no, @p_tot

END

CLOSE get_tot

DEALLOCATE get_tot

IF @count=0

SELECT 0

ELSE

SELECT业务员销售总金额=@sum

END

GO

②执行存储过程

EXEC emp_tot '张小娟'

本例中,先建立一个游标用于临时储存业务员的基本销售信息,包括:业务员姓名、客户编号、订单编号、订单销售金额;再利用游标能逐行提取的功能,提取游标中每一记录,同时输出这些信息;最后统计其相应定单金额的总额,并输出订单总额。

6.3 实验内容

请完成以下实验内容:

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

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

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

(3) 利用游标修改OrderMaster表中Ordersum的值。

(4) 利用游标显示出OrderMaster表中每一个定单所对应的明细数据信息。

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

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

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

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

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

游标与存储过程

实验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.建立信息系学生的视图IS_student。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS' 2.建立信息系选修了1号课程的学生的视图IS_S1。CREATE VIEW IS_S1(Sno,Sname,Grade) AS SELECT Student.Sno,Sname,Grade FROM Student,SC WHERE Sdept='IS'AND Student.Sno=SC.Sno AND https://www.360docs.net/doc/ee3744127.html,o='1';

3.建立信息系选修了1号课程且成绩在90分以上的学生的视图IS_S2。CREATE VIEW IS_S2 AS SELECT Sno,Sname,Grade FROM IS_S1 WHERE Grade>=90 4.建立一个反映学生出生年份的视图BT_S。 CREATE VIEW BT_S(Sno,Sname,Sbirth) AS SELECT Sno,Sname,2004-Sage FROM Student

5.将学生的学号及他的平均成绩定义为一个视图S_G。CREATE VIEW S_G(Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno 6.将课程的课号及选修人数定义为一个视图C_XIU。CREATE VIEW C_XIU(Cno,Scount)

AS SELECT Cno,COUNT(*) FROM SC GROUP BY Cno (二)查询视图(运行并观察结果) 1.在信息系学生的视图中找出年龄小于20岁的学生。SELECT Sno,Sage FROM IS_Student WHERE Sage<20 2.查询信息系选修了1号课程的学生。 SELECT IS_Student.Sno,Sname FROM IS_Student,SC WHERE IS_Student.Sno=SC.Sno AND https://www.360docs.net/doc/ee3744127.html,o='1'

数据结构实验

数据结构实验指导书

实验一线性表的顺序存储结构 一、实验学时 4学时 二、背景知识:顺序表的插入、删除及应用。 三、目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 四、实验内容 1.从键盘随机输入一组整型元素序列,建立顺序表。(注意:不可将元素个数和元素值写死在程序中) 2.实现该顺序表的遍历(也即依次打印出每个数据元素的值)。 3.在该顺序表中顺序查找某一元素,如果查找成功返回1,否则返回0。 4.实现把该表中某个数据元素删除。 5.实现在该表中插入某个数据元素。 6.实现两个线性表的归并(仿照课本上P26 算法2.7)。 7. 编写一个主函数,调试上述6个算法。 五、实现提示 1.存储定义 #include #include #define MAXSIZE 100 //表中元素的最大个数

typedef int ElemType;//元素类型 typedef struct list{ ElemType *elem;//静态线性表 int length; //表的实际长度 int listsize; //表的存储容量 }SqList;//顺序表的类型名 2.建立顺序表时可利用随机函数自动产生数据。 3.为每个算法功能建立相应的函数分别调试,最后在主函数中调用它们。 六、注意问题 插入、删除元素时对于元素合法位置的判断。 七、测试过程 1.先从键盘输入元素个数,假设为6。 2.从键盘依次输入6个元素的值(注意:最好给出输入每个元素的提示,否则除了你自己知道之外,别人只见光标在闪却不知道要干什么),假设是:10,3,8,39,48,2。 3.遍历该顺序表。 4.输入待查元素的值例如39(而不是待查元素的位置)进行查找,因为它在表中所以返回1。假如要查找15,因为它不存在,所以返回0。 5.输入待删元素的位置将其从表中删掉。此处需要注意判断删位置是否合法,若表中有n个元素,则合法的删除位

实验六 存储过程和触发器

实验六存储过程和触发器(2学时) 1.实验目的 (1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。 (2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。 (3)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。 (4)掌握引发触发器的方法。 (5)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。 2.实验内容 (1)输入以下T-SQL代码,创建一个利用流控制语句的存储过程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 使用EXECUTE命令执行letters_print存储过程。 (2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。 CREATE PROCEDURE stu_info @name varchar(40) AS SELECT a.no,name,cno,grade FROM Student a INNER JOIN grade b ON a.no= b.sno WHERE name= @name 使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。 如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义? (3)使用student_db数据库中的Student表、course表、grade表。 ①创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、

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.熟练掌握在图的邻接表实现图的基本操作。 3.理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。 二、实验内容 一>.基础题目:(本类题目属于验证性的,要求学生独立完成) [题目一]:从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网 的类型定义和基本操作,完成上述功能。 [题目二]:从键盘上输入AOE网的顶点和有向边的信息,建立其邻接表存储结构,输出其关键路径和关键路径长度。试设计程序实现上述AOE网类型定义和基本操作,完成上述功能。 测试数据:教材图7.29 【题目五】连通OR 不连通 描述:给定一个无向图,一共n个点,请编写一个程序实现两种操作: D x y 从原图中删除连接x,y节点的边。 Q x y 询问x,y节点是否连通 输入 第一行两个数n,m(5<=n<=40000,1<=m<=100000) 接下来m行,每行一对整数 x y (x,y<=n),表示x,y之间有边相连。保证没有重复的边。 接下来一行一个整数 q(q<=100000) 以下q行每行一种操作,保证不会有非法删除。 输出 按询问次序输出所有Q操作的回答,连通的回答C,不连通的回答D 样例输入

3 3 1 2 1 3 2 3 5 Q 1 2 D 1 2 Q 1 2 D 3 2 Q 1 2 样例输出 C C D 【题目六】 Sort Problem An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not. 【Input】 Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n<= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. 1 <= m <= 100. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input. 【Output】 For each problem instance, output consists of one line. This line should be one of the following three: Sorted sequence determined: y y y… y. Sorted sequence cannot be determined. Inconsistency found.

实验六 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 ) begin select 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) begin update stu set stuno=stuno+n; end // delimiter ; 5. delimiter // create procedure addstu( in sno int ) begin case sno when 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 //

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

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

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;

数据结构第六章实验

#include #include #include typedef struct{ unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char * *HuffmanCode; /*void Select(HuffmanTree &HT,int n,int &s1,int &s2) { s1=1;int j; for(j=1;j<=n;j++) { while(HT[j].parent==0) { if(HT[s1].weight>HT[j].weight) s1=j; } } HT[s1].parent=1; if(s1!=1)s2=1;else s2=2; for( j=1;j<=n;j++) { while(HT[j].parent==0) { if(HT[s2].weight>HT[j].weight) s2=j; } } }错误,未查出原因*/ int min(HuffmanTree t,int i) { int j,flag; unsigned int k; for(j=1;j<=i;j++) if(t[j].weight

实验6 存储过程创建与应用

学院:信息工程学院 专业:计算机科学与技术姓名:蔡启林 学号:201013432

实验六存储过程创建与应用 一、实验目的 使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。 二、实验内容 (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)

查询执行结果为: (2) 查询执行结果为:

(3) 查询执行结果为: (4)

查询执行结果为: (5)

(6) 四、实验总结 要求个人填写(实验中发现的问题和解决的办法) 通过这次试验我更加深刻的理解了存储过程的概念,SQL Sever中的存储过程与其他编程语言中的函数类似,就像是函数的调用,包含执行各种数据库操作的语句,并且可以调用其他的存储过程,接受输入参数并以输出参数的格式向调用过程或批处理返回多个值,向调用过程或批处理返回状态值,以指明成功或失败,把实现一些功能的语句封装起来,需要使用的时候进行调用,效率很高使用起来方便。创建存储过程有一定的设计规则,实验课中涉及的规则比较少,比较简单,有些复杂的规则还需在练习中遇到问题才能认识到。存储过程的相关语句有创建create procedure,修改alter procedure,执行execute,删除drop procedure等等,大体的框架掌握了之后,主要就是写T-SQL语句以实现相应的功能。在创建的时候要注意输入和输出参数,我在定义的时候忘记了out导致错误。仔细检查改过错误后就解决了这个问题,这次实验让我了解了使用存储过程的好处,让我再以后的数据库学习中更好的熟练掌握这门课。

实验九 游标与存储过程

实验九游标与存储过程 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 '客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'

MATLAB实验六图形绘制

实验6 图形绘制(3) 报告人: 王业成 年级: 机电131 学号: 2013012496 实验日期: 2015.4.27 报告完成日期: 2015.4.27 一、实验名称 图形绘制 二、实验目的: 熟悉MATLAB 的三维图形绘制函数。 三、实验内容: subplot(2,2,1),sphere(3); title('n=3'),axis equal subplot(2,2,2), sphere(6); title('n=6'),axis equal subplot(2,2,3), sphere(10) title('n=10'),axis equal subplot(2,2,4), sphere(15); title('n=15'),axis equal n=3 n=6 n=10 n=15

t=linspace(pi/2,3.5*pi,50);R=cos(t)+2; subplot(2,2,1); cylinder(R,3), title('n=3'); subplot(2,2,2) cylinder(R,6),title('n=6'); subplot(2,2,3) cylinder(R),title('n=20') subplot(2,2,4) cylinder(R,50),title('n=50') [x,y]=meshgrid(-8:0.5:8,-10:0.5:10); R=sqrt(x.^2+y.^2)+eps; z=sin(R)./R; mesh(x,y,z); n=3 n=6 n=20 n=50

x=-pi:0.15:pi; y=sin(x); subplot(2,1,1), H=bar(x,y); xx=get(H,'xdata'); yy=get(H,'ydata'); subplot(2,1,2),plot(xx,yy); 四、回答问题: (回答实验指导书中提出的问题) 五、思考题: 1.试绘制出 2 2 2 2 )1(1)11)y ,x (f z y x y x +++ +-==的三维曲面图 和三视图 [x,y]=meshgrid(-1:0.1:1,-1:0.1:1); R=sqrt((1-x.^2)+y.^2)+eps; P=sqrt((1+x.^2)+y.^2)+eps; z=1./R+1./P; subplot(4,1,1) surf(x,y,z);

数据结构实验六 图的应用及其实现

实验六图的应用及其实现 一、实验目的 1.进一步功固图常用的存储结构。 2.熟练掌握在图的邻接表实现图的基本操作。 3.理解掌握AOE网在邻接表上的实现及解决简单的应用问题。 二、实验内容 [题目]:从键盘上输入AOE网的顶点和有向边的信息,建立其邻接表存储结构,输出其关键路径和关键路径长度。试设计程序实现上述AOE网类型定义和基本操作,完成上述功能。 三、实验步骤 (一)、数据结构与核心算法的设计描述 本实验题目是基于图的基本操作以及邻接表的存储结构之上,着重拓扑排序算法的应用,做好本实验的关键在于理解拓扑排序算法的实质及其代码的实现。 (二)、函数调用及主函数设计 以下是头文件中数据结构的设计和相关函数的声明: typedef struct ArcNode // 弧结点 { int adjvex; struct ArcNode *nextarc; InfoType info; }ArcNode; typedef struct VNode //表头结点 { VertexType vexdata; ArcNode *firstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct //图的定义 { AdjList vertices; int vexnum,arcnum; int kind; }MGraph; typedef struct SqStack //栈的定义 { SElemType *base; SElemType *top; int stacksize;

}SqStack; int CreateGraph(MGraph &G);//AOE网的创建 int CriticalPath(MGraph &G);//输出关键路径 (三)、程序调试及运行结果分析 (四)、实验总结 在做本实验的过程中,拓扑排具体代码的实现起着很重要的作用,反复的调试和测试占据着实验大量的时间,每次对错误的修改都加深了对实验和具体算法的理解,自己的查错能力以及其他各方面的能力也都得到了很好的提高。最终实验结果也符合实验的预期效果。 四、主要算法流程图及程序清单 1、主要算法流程图: 2、程序清单: 创建AOE网模块: int CreateGraph(MGraph &G) //创建有向网 { int i,j,k,Vi,Vj; ArcNode *p; cout<<"\n请输入顶点的数目、边的数目"<

6实验六 存储过程

实验六存储过程 一、实验目的 (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.360docs.net/doc/ee3744127.html,o=https://www.360docs.net/doc/ee3744127.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'不存在,可创建!'

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

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

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

相关文档
最新文档