实验14 存储过程与函数
数据库SQL实验题目(14-15-1)

实验一数据定义操作●实验目的1.掌握数据库和表的基础知识2.掌握使用创建数据库和表的方法3.掌握数据库和表的修改、查看、删除等基本操作方法●实验内容和要求一、数据库的创建在开始菜单中,启动SQl Server 程序中的“SQL Server Management Studio”,在对象资源管理器窗口中,右键单击“数据库”,选择“新建数据库”,创建成绩管理数据库Grademanager,要求如下表所示:Grademanager数据库参数表二、表的创建、查看、修改和删除1.表的创建在Grademanager数据库中,右键单击“表”,选择“新建表”命令,创建如下表所示的表:(1)Student表的表结构特别注意:为属性Ssex设置约束,需选中属性Ssex行,然后单击菜单中的“表设计器”,选择“CHECK 约束”命令,然后按照图1进行设置。
图1 设置性别的约束(2)Course表(课程名称表)的表结构(3)SC表(成绩表)的表结构特别注意:①为属性Degree 约束,可参照属性Ssex进行设置,“CHECK约束对话框”中的表达式为Degree>=1 And Degree<=100②为SC表设置外键Sno和Cno的方法:右键单击表SC,选择“设计”命令,然后选择菜单“表设计器”中的“关系”命令,打开“外键关系”窗口,选择“添加”按钮,然后单击“表和列规范”后的按钮,按照图2进行设置,即可将SC表中的Cno属性设置为外键。
按照相同的方法,将属性Sno也设置为外键。
图2为SC表设置外键Cno2.向上述表中输入如下数据记录学生关系表Student (右键单击表Student ,选择“编辑前200行”)课程关系表Course 成绩表SC3.修改表结构(找到操作的方法即可,不需要真正地修改表中的属性) (1)向student 表中增加“入学时间”列,其数据类型为日期型 (2)将student表中的sdept 字段长度改为20 (3)将student 表中的Speciality 字段删除思考题1. SQL Server 的数据库文件有几种?扩展名分别是什么? 2. 如何实现数据库的备份和还原?2.在定义基本表语句时,NOT NULL 参数的作用是什么? 3.主码可以建立在“值可以为NULL ”的列上吗?实验二 简单查询● 实验目的1. 掌握SELECT 语句的基本用法2. 使用WHERE 子句进行有条件的查询3. 掌握使用IN 和NOT IN ,BETWEEN …AND 和NOT BETWEEN …AND 来缩小查询范围的方法4. 掌握聚集函数的使用方法5. 利用LIKE 子句实现字符串匹配查询6. 利用ORDER BY 子句对查询结果排序7. 利用GROUP BY 子句对查询结果分组● 实验内容和要求一、表结构修改1.在实验一的所建立的数据库中增加Teacher 表,结构如下:2.在实验一的所建立的数据库中增加Teaching 表,表结构如下: Teaching 表(授课表)的表结构3.向上述两表中输入如下数据记录教师表Teacher 授课表Teaching二、完成下面查询 1.查询所有男生信息2.查询年龄大于24岁的女生学号和姓名3.查询所有教师的Tname、Tdept4.查询“电子商务”专业的学生姓名、性别和出生日期5.查询成绩低于90分的学生学号及课号,并按成绩降序排列6.查询Student表中所有的系名7.查询“C01”课程的开课学期8.查询成绩在80分至90之间的学生学号及课号9.统计有学生选修的课程门数10.查询成绩为77,88或99的记录11.计算“C02”课程的平均成绩12.输出有成绩的学生学号13.查询所有姓“刘”的学生信息14.统计输出各系学生的人数15.查询选修了“C03”课程和学生的学号及其成绩,查询结果按分数的降序排列16.查询各个课程号及相应的选课人数,并为选课人数取别名为“人数”17.统计每门课程的选课人数和最高分,并为选课人数和最高分分别取别名为“人数”、“最高分”18.统计每个学生的选课门数和考试总成绩,并为选课门数和总成绩分别取别名为“门数”、“总成绩”,并按选课门数降序排列。
存储过程和函数

➢ 2.3 调用存储过程和函数
2
调用存储函数
通常使用关键字SELECT调用存储函数,其语法形式如下:
SELECT function_name([parameter[,……]]);
【实例4】
调用实例13-2创建的存储函数func(),查看其返回值。
首先登录MySQL,并选择数据库db_shop。SQL语句及其执行结果如下:
下面以名为“not_found_database”的条件“ERROR 1049(42000)”的定义为例,来看看这两 种形式的区别。
DECLARE not_found_database CONDITION FOR 1049;
步骤1 使用Navicat for MySQL连接MySQL后,双击需要操作的数据库“test_db”,然后单击“函数”按 钮。 步骤2 单击“新建函数”按钮,选择需要创建的类型,此处选择创建存储过程,如图13-1所示。
➢ 2.4 使用图形化工具创建存储过程和函数
步骤3 在编辑区填写存储过程需要的参数, 单击编辑区左下方的“+”按钮可以添加参数,单 击“-”按钮可以删除参数,如果存储过程没有参 数,直接单击“完成”按钮即可,如图13-2所示。
存储过程和函数
存储过程和函数概述
1
针对表的一个完整操作往往不是单条SQL语句就能实现的,而是需要一组SQL语句来实现。 例如,要完成一个购买商品的订单的处理,一般需要考虑以下几步:
存储过程、函数与触发器操作答案

《存储过程、函数与触发器操作》实验一、实验目的与要求1、掌握存储过程的使用。
2、掌握函数的使用。
3、掌握触发器操作。
三、实验内容一、存储过程1、在“教务管理系统”数据库中创建一个名为ProcStudentInfo的存储过程,它返回学生的学号、姓名、性别、班级编号、年级和籍贯信息。
CREATE PROCEDURE Proc_StudentInfoASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息2、用EXECUTE执行Proc_StudentInfo存储过程。
EXECUTE Proc_StudentInfo3、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息。
CREATE PROCEDURE Proc_GetClassStudent1@ClassID varchar(14)ASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=@ClassID4、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息,默认班级编号为'20031340000102' 。
CREATE PROCEDURE Proc_GetClassStudent2@ClassID varchar(14)= '20031340000102'ASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=@ClassIDEXECUTE Proc_GetClassStudent2 '20031340000103'5、创建一个返回执行代码为100的存储过程。
CREATE PROCEDURE Proc_GetClassStudent4@ClassID varchar(14)ASBEGINSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=@ClassIDRETURN 100END6、执行存储过程Proc_GetClassStudent2和Proc_GetClassStudent4,并定义两个个变量存储执行返回代码。
实现存储过程和函数实现存储过程创建参数化存储过程创建函数处理

SQL Server 2005数据库开发与实现
第1章:SQL Server 2005启航 第10章:使用 XML 第11章:灾难恢复 第12章:管理安全性 第13章:监视 SQL Server
第2章:安装和配置SQL Server 2005
第3章:创建数据库和数据 库文件
9.2.1 输入参数
输出参数和返回值
9.2.2 输出参数和返回值
CREATE PROC HumanResources.AddDepartment @Name nvarchar(50), @GroupName nvarchar(50), @DeptID smallint OUTPUT AS IF ((@Name = '') OR (@GroupName = '')) RETURN -1 INSERT INTO HumanResources.Department (Name, GroupName) VALUES (@Name, @GroupName) SET @DeptID = SCOPE_IDENTITY() RETURN 0
课堂练习:创建函数
本次练习的目标是创建标量函数、内联 表值函数以及多语句表值函数。
用户定义函数的类型
创建标量函数 创建内联表值函数
创建多语句表值函数
第9章:实现存储过程和函数
实现存储过程 创建参数化存储过程 创建函数 处理错误 控制执行上下文 实验 习题
结构化异常处理的语法
TRYE··· CATCH 块提供结构 TRY 块包含受保护的事务 CATCH 块处理事务
9.4.1 结构化异常处理的语法
CREATE PROCEDURE dbo.AddData @a int, @b int AS
存储过程 函数调用

存储过程函数调用摘要:一、存储过程概述1.存储过程定义2.存储过程作用二、函数调用概述1.函数调用定义2.函数调用作用三、存储过程与函数调用的异同1.共同点2.区别四、存储过程实例1.创建存储过程2.调用存储过程五、函数调用实例1.创建函数2.调用函数六、实战应用场景1.存储过程应用场景2.函数调用应用场景正文:一、存储过程概述1.存储过程定义存储过程是一种服务器端的预编译程序,它接受输入参数,执行某些操作,并返回结果。
存储过程存储在数据库中,可以由数据库管理员或开发人员创建和调用。
2.存储过程作用存储过程主要用于处理复杂的业务逻辑,如数据验证、数据集成和数据计算等。
它可以减轻应用程序的压力,提高数据库性能,降低网络传输负担。
二、函数调用概述1.函数调用定义函数调用是指在程序运行过程中,通过传递参数的方式,调用已经定义好的函数,并执行其功能。
2.函数调用作用函数调用可以帮助开发者将代码模块化,提高代码复用性和可维护性。
同时,它还可以实现一些特定的功能,如数学计算、字符串处理等。
三、存储过程与函数调用的异同1.共同点存储过程和函数调用都是处理业务逻辑的方法,它们都可以接受参数、返回结果,并执行一定的操作。
2.区别(1)存储过程主要应用于数据库层面,侧重于处理数据库操作,如数据的增、删、改、查等。
(2)函数调用可以应用于程序的任何层面,包括数据库、服务器端和客户端等,侧重于处理通用的逻辑功能。
四、存储过程实例1.创建存储过程以下是一个创建存储过程的示例:```DELIMITER //CREATE PROCEDURE example_procedure(IN p_name VARCHAR(50)) BEGINSELECT * FROM users WHERE name = p_name;END //DELIMITER ;```2.调用存储过程以下是一个调用存储过程的示例:```DELIMITER //CREATE PROCEDURE example_procedure(IN p_name VARCHAR(50)) BEGINSELECT * FROM users WHERE name = p_name;END //DELIMITER ;CALL example_procedure("John");```五、函数调用实例1.创建函数以下是一个创建函数的示例:```DELIMITER //CREATE FUNCTION example_function(IN p_name VARCHAR(50)) RETURNS TABLE (id INT, name VARCHAR(50))BEGINRETURN QUERY SELECT id, name FROM users WHERE name = p_name;END //DELIMITER ;```2.调用函数以下是一个调用函数的示例:```DELIMITER //CREATE FUNCTION example_function(IN p_name VARCHAR(50)) RETURNS TABLE (id INT, name VARCHAR(50))BEGINRETURN QUERY SELECT id, name FROM users WHERE name = p_name;END //DELIMITER ;SELECT * FROM example_function("John");```六、实战应用场景1.存储过程应用场景存储过程适用于处理复杂的业务逻辑,如批量数据处理、数据验证等。
存储过程和函数

存储过程和函数一、实验学时:2学时二、实验类型:设计性实验。
三、实验目的和主要内容:熟悉存储过程和函数的语法格式及其创建和执行方法。
主要内容包括:1. 编写一个存储过程,用它显示scott.dept、scott.emp表中各部门的名称、员工总数以及员工的工资总和和平均工资。
SQL> Set serverout on;SQL> create or replace procedure v_name_count_avg_sal2 as3 v_dept dept %rowtype;4 v_count number;5 v_totalsal emp.sal%type;6 v_avgsal emp.sal%type;78 begin9 dbms_output.put_line ('各部门的名称为');10 for v_dname in (select * into v_dept from dept)11 loop12 dbms_output.put_line (v_dname.dname);13 end loop;14 select count(*) into v_count from emp;15 dbms_output.put_line('员工总数为' || v_count);16 select sum(sal) into v_totalsal from emp;17 dbms_output.put_line('员工工资总数为' || v_totalsal);18 select avg (sal) into v_avgsal from emp;19 dbms_output.put_line('员工平均工资为' || v_avgsal);2021 end v_name_count_avg_sal;22 /2. 编写一个函数,用它计算0到指定数字(作为函数输入参数)之间的整数和。
存储过程、触发器和函数实验讲述

存储过程、触发器和用户自定义函数实验实验内容一练习教材中存储过程、触发器和用户自定义函数的例子。
教材中的BookSales数据库,在群共享中,文件名为BookSales.bak。
实验内容二针对附件1中的教学活动数据库,完成下面的实验内容。
1、存储过程(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。
(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。
(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。
(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。
(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。
2、触发器(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。
(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。
(3)为course表创建一个INSERT触发器,要求插入的课程记录中任课教师不能为空。
3、用户自定义函数(1)创建一个返回标量值的用户定义函数 RectangleArea:输入矩形的长和宽就能计算矩形的面积。
create function RectangleArea(@a int,@b int)returns intasbeginreturn@a*@bend(2)创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。
该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。
调用这个函数,生成相应的报表并给用户浏览。
create function student_table()returns tableasreturn(select student_course.tcid课程号,ame课程名,COUNT(student_course.sno)选修人数,max(student_course.score)最高分,min(student_course.score)最低分,avg(student_course.score)平均分from student_course,coursewhere student_course.tcid=ogroup by student_course.tcid,ame)实验数据库说明教学活动数据库包括student、course和study三个基本表,三个基本表的结构说明和数据如下:(1)学生表(student)学生表的结构列名数据类型长度是否允许为空值字段说明sno char 5 NO 学号sname char 8 NO 姓名age smallint 年龄sex nchar 1 性别说明:sno为主键,age的范围为15~35之间,sex只能为“男”或“女”。
数据库原理之存储过程和函数

一、存储过程和函数概述1.1 什么是存储过程和函数存储过程(Stored Procedure)和函数(Stored Function)是在数据库中定义一些完成特定功能的SQL 语句集合,经过编译后存储在数据库中。
存储过程和函数中可以包含流程控制语句以及各种SQL 语句。
他们可以接受参数、输出参数、返回单个或多个结果。
1.2 存储过程的优点在MySQL 中使用存储过程,而不是用存储在客户端计算机本地的SQL 程序,相比有以下几点优点。
(1)存储过程增强了SQL 语言的功能和灵活性。
存储过程可以使用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的计算。
(2)存储过程允许标准组件是编程。
存储过程被创建后,可以在程序中被多次调用,而不用重新编写该存储过程的SQL 语句。
而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3)存储过程能实现较快的执行速度。
如果某一操作包含大量的SQL 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多,因为存储过程是预编译的。
在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被储存在系统表中的执行计划。
而批处理的SQL 语句在每次运行时都要进行编译和优化,速度相对要慢。
(4)存储过程能够减少网络流量。
针对同一个数据库对象的操作(比如查询、修改),如果这一操纵所涉及的SQL 语句被组织成存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句从而大大减少了网络流量并降低了网络负载。
(5)存储过程可被当作一种安全机制来充分利用。
系统管理员通过执行某一存储过程的权限进行限制,能够实现对响应的数据的访问权限的限制,避免了非授权用户对数据的访问。
二、创建存储过程和函数在MySQL中,创建存储过程和函数必须具有CREATE ROUTINE 权限,并且ALTER ROUTINE 和EXECUTE 权限被自动授予它的创建者。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十四存储过程与函数【实验目的与要求】1.熟练掌握存储过程的编写。
2.熟练掌握函数的编写与使用。
【实验内容与步骤】14.1.基础知识存储过程(Stored Procedure)和函数是一组编译好存储在服务器上的完成特定功能T-SQL代码,是某数据库的对象。
客户端应用程序可以通过指定存储过程或函数的名字并给出参数(如果该存储过程带有参数)来执行存储过程。
14.2.创建用户存储过程1. 使用存储过程模板创建存储过程在【对象资源管理器】窗口中,展开“数据库”节点,再展开所选择的具体数据库节点,再展开选择“可编程性”节点,右击“存储过程”,选择“新建存储过程”命令,如图所示:在右侧查询编辑器中出现存储过程的模板,可以在此基础上编辑存储过程,单击“执行”按钮,即可创建该存储过程。
实验14-1:创建一个简单的存储过程,实现从CP表中读取Mp3产品相关信息USE CPXSGOCREATE PROCEDURE get_mp3 --此为无参存储过程ASSELECT产品编号,产品名称,价格,库存量FROM CPWHERE产品名称='mp3'实验14-2:执行存储过程执行存储过程可用下列方法之一:(1)使用存储过程名字如:get_mp3(2) 使用Exec命令:如:EXEC get_mp3执行上面创建的存储过程,并给出执行结果:2. 使用T-SQL语句创建存储过程在查询分析器里使用T-SQL可直接创建存储过程格式:CREATE PROC 过程名@形参名类型@变参名类型OUTPUTASSQL语句实验14-3:创建一个多表查询的存储过程。
问题:查询在2009年9月18日有销售的产品名称(1)请给出相应的代码create proc get_cpasselect产品名称from cp,cpxsbwhere销售日期='2009-9-18'(2)执行存储过程,并给出执行结果:(cpxsb中无销售日期为20090918的数据)14.3.存储过程的参数1. 输入参数(值参)实验14-4:输入参数为某产品的名字。
USE CPXSGOCREATE PROCEDURE P_CPXS2@Product_name char(30)--形式参数AsSELECT产品编号,产品名称,价格,库存量FROM CPWHERE 产品名称= @ Product_nameGO执行存储过程:(1)直接传值:EXEC P_CPXS2 '冰箱'--实参表请给出执行结果:(2)变量传值:DECLARE @temp char(30)SET @temp='洗衣机'EXEC P_CPXS2 @temp --实参表请给出执行结果:实验14-5:使用默认参数阅读以下程序段,理解参数传递过程USE CPXSGOCREATE PROCEDURE P_CPXS3@name varchar(10)=NULL--默认参数ASIF @name IS NULLSELECT 产品编号,产品名称,价格,库存量FROM CPELSESELECT 产品编号,产品名称,价格,库存量FROM CPWHERE 产品名称=@nameGO执行存储过程:(1) 不带参数时EXEC P_CPXS3请给出执行结果:(2) 不带参数时EXEC P_CPXS3 ‘彩电’请给出执行结果:2. 输出参数(变参)实验14-6:利用输出参数计算阶乘。
USE CPXS–判断系统中是否有名为factorial的存储过程,若有,则删除之IF EXISTS(SELECT name FROM sysobjectsWHERE name='factorial'AND type='P')DROP PROCEDURE factorialGO --前面这段仅是准备工作,真正的工作在之后CREATE PROCEDURE factorial --创建存储过程@in float,--输入形式参数@out float OUTPUT--输出形式参数ASDECLARE @i intDECLARE @s floatSET @i=1SET @s=1WHILE @i<=@inBEGINSET @s=@s*@iSET @i=@i+1ENDSET @out=@s --给输出参数赋值调用存储过程:DECLARE @ou float–定义变量,用于存储结果值EXEC factorial 5,@ou OUT --实参表PRINT @ou请给出执行结果:14.4.创建用户自定义函数1. 使用存储过程模板创建存储过程在【对象资源管理器】窗口中,展开“数据库”节点,再展开所选择的具体数据库节点,再展开选择“可编程性”节点,右击“函数”,选择“新建”命令,在下一级菜单中选择适合的选项,如图所示:在右侧查询编辑器中出现函数的模板,可以在此基础上编辑函数,单击“执行”按钮,即可创建该函数。
2. 使用T-SQL语句创建函数函数分为标量函数和表值函数。
前者返回一个标量值结果,在创建函数时,应在Returns 语句后指明标量类型(如:int );后者以表的形式返回结果,在创建函数时,应在Returns 语句后用关键词Table指时其反回类型。
在查询分析器里可使用T-SQL可直接创建函数格式:CREATE FUNCTION 函数名(@形参名类型@变参名类型)[RETURNS 类型]ASSQL语句3. 使用标量函数标量函数接受0个或多个输入参数,并返回一个标量值。
因为标量函数只返回一个值,所以通常在一个select语句的列列表中使用它们,也可以在where子句中使用它们。
实验14-7:基于CP表编写函数getStock( ),根据传进的参数“产品编号”,查询并返回相应产品的“库存量”。
请阅读以下程序,理解其基本结构和实现思想,给出运行结果。
调用函数:函数一般在Select语句或Where子句中被调用,以下是一函数调用实例:请给出执行结果:4. 使用表值函数表值函数遵守与标量函数相同的规则,区别在于表值函数返回一个表作为输出。
因此,一般在select语句的from子句中使用它们,并可能与其他表或视图进行联接。
实验14-8:创建一个自定义函数fun_cpInfo(),根据产品编号返回该产品的名称、价格和库存量。
create function fun_cpInfo(@product_No char(6))returns table --表值函数,返回查询结果集(即表)asreturn( select 产品名称,价格,库存量from CPwhere 产品编号=@product_No)调用函数:函数创建后,可在SQL语句中调用。
调用函数fun_cpInfo(),可在查询分析器中执行如下Select语句:请给出执行结果:思考:请比较标量函数和表值函数,理解其在编写和使用上的差别。
14.5.实验练习14.5.1 存储过程对于CPXS数据库,完成以下存储过程。
1. 无参存储过程编写一无参存储过程用于查询每个客户购买产品的情况(包括客户编号、产品编号、客户名称、产品名称、价格、购买日期、购买数量),然后调用该存储过程。
请给出程序源码:create proc kh_cp_infoasselect cpxsb.客户编号,cpxsb.产品编号,客户名称,产品名称,价格,销售日期,数量from cp,xss,cpxsbwhere cp.产品编号=cpxsb.产品编号and xss.客户编号=cpxsb.客户编号请给出执行测试结果:2. 带有参数的存储过程编写一加密存储过程,查询指定客户购买产品的情况。
并调用该存储过程查询客户编号为“000002”的客户购买情况。
请给出程序源码:create proc kh_info@khbh char(6)with encryptionasselect cpxsb.客户编号,cpxsb.产品编号,客户名称,产品名称,价格,销售日期,数量from cp,xss,cpxsbwhere xss.客户编号=@khbhand cp.产品编号=cpxsb.产品编号and xss.客户编号=cpxsb.客户编号请给出执行测试结果:3. 带有通配符参数的存储过程编写一存储过程,查询指定产品的销售情况。
如果没有提供参数,则查询产品名称中包含有“冰箱”的产品销售情况。
请给出程序源码:create proc cp_infor@mc varchar(20)='%冰箱%'asselect cpxsb.客户编号,cpxsb.产品编号,客户名称,产品名称,价格,销售日期,数量from cp,xss,cpxsbwherecpxsb.产品编号in(select产品编号from cp where产品名称like @mc)and cp.产品编号=cpxsb.产品编号and xss.客户编号=cpxsb.客户编号请给出执行测试结果:4. 带有OUTPUT参数的存储过程编写一存储过程,查询指定客户在指定时间段内购买指定产品的数量,存储过程中使用了输入和输出参数。
并调用该存储过程查询名称为“家电市场”的客户在2004年购买“洗衣机”的数量。
请给出程序源码:请给出执行测试结果:5. 带有OUTPUT游标参数的存储过程编写一带有OUTPUT游标参数的存储过程,游标结果集为客户信息,并通过调用该存储过程,实现依次读取游标CUR2中各行数据。
请给出程序源码:请给出执行测试结果:6. 创建一个多表查询的存储过程。
问题:查询在2009年9月18日有销售的产品名称(若无此数据,请先添加之,以便于测试)。
(1)请给出相应的代码create function cp_name(@cp_name char(10))returns tableasreturn(select产品名称from cp,cpxsbwhere销售日期=@time and cp.产品编号=cpxsb.产品编号)(2)执行存储过程,并给出执行结果:14.5.2 函数对于CPXS数据库,定义完成如下功能的函数。
1.据产品名称,查询该产品的相关信息。
(函数名为:FU_CP)请给出程序源码:create function fu_cp(@cp_name char(10))returns tableasreturn(select*from CPwhere产品名称=@cp_name)请给出执行测试结果:查询产品名称为“mp3”的产品情况2.按某年某季度统计给定产品名称的销售数量及销售金额。
(函数名为:FU1_CPXS)请给出程序源码:create function FU1_CPXS (@cp_name char(20),@year int,@quarter int) returns tableasreturn(select sum(数量)as销售数量,sum(销售额)as销售总额from cp,xss,cpxsbwhere cp.产品编号=cpxsb.产品编号and xss.客户编号=cpxsb.客户编号and datepart(year,销售日期)=@yearand datepart(quarter,销售日期)=@quarterand产品名称=@cp_namegroup by产品名称)请给出执行测试结果:查询2004年第3季度彩色电视机的销售数量和销售金额(数据库中无第三季度的数据,改为查询第一季度)3.根据销售商名称,统计其在某年某季度内销售商品名称、数量及金额。