【实验目的与要求】
1. 熟练掌握存储过程的编写。
2. 熟练掌握函数的编写与使用。
实验内容与步骤】
存储过程(stored procedure)和函数是一组编译好存储在服务器上的完成特定功能t-sql**,是某数据库的对象。客户端应用程序可以通过指定存储过程或函数的名字并给出参数(如果该存储过程带有参数)来执行存储过程。
在【对象资源管理器】窗口中,展开“数据库”节点,再展开所选择的具体数据库节点,再展开选择“可编程性”节点,右击“存储过程”,选择“新建存储过程”命令,如图所示:
在右侧查询编辑器**现存储过程的模板,可以在此基础上编辑存储过程,单击“执行”按钮,即可创建该存储过程。
实验14-1:创建一个简单的存储过程,实现从cp表中读取***产品相关信息。
use cpxs
gocreate procedure get_*** --此为无参存储过程。
asselect 产品编号,产品名称,**,库存量。
from cp
where产品名称='***'
实验14-2:执行存储过程。
执行存储过程可用下列方法之一:
1)使用存储过程名字如:get_***
2) 使用exec命令:如:exec get_***
执行上面创建的存储过程,并给出执行结果:
在查询分析器里使用t-sql可直接创建存储过程。
格式:create proc 过程名。
形参名类型。
变参名类型 output
as sql语句。
实验14-3:创建一个多表查询的存储过程。
问题:查询在2023年9月18日有销售的产品名称。
1)请给出相应的**。
create proc get_cp
asselect 产品名称。
from cp,cpxsb
where 销售日期='2009-9-18'
2)执行存储过程,并给出执行结果:
cpxsb中无销售日期为***的数据)
实验14-4:输入参数为某产品的名字。
use cpxs
gocreate procedure p_cpxs2
product_name char(30) -形式参数。
asselect 产品编号,产品名称,**,库存量。
from cp
where 产品名称= @product_name
go执行存储过程:
1)直接传值:
exec p_cpxs2 '冰箱' -实参表。
请给出执行结果:
2)变量传值:
declare @temp char(30)
set @temp='洗衣机'
exec p_cpxs2 @temp --实参表。
请给出执行结果:
实验14-5:使用默认参数。
阅读以下程序段,理解参数传递过程
use cpxs
gocreate procedure p_cpxs3
name varchar(10)=null --默认参数。
asif @name is null
select 产品编号,产品名称,**,库存量。
from cp
elseselect 产品编号,产品名称,**,库存量。
from cp
where 产品名称=@name
go执行存储过程:
1) 不带参数时。
exec p_cpxs3
请给出执行结果:
2) 不带参数时。
exec p_cpxs3 ‘彩电’
请给出执行结果:
实验14-6:利用输出参数计算阶乘。
use cpxs
判断系统中是否有名为factorial的存储过程,若有,则删除之。
if exists(select name from sysobjects
where name='factorial' and type='p')
drop procedure factorial
go --前面这段仅是准备工作,真正的工作在之后。
create procedure factorial --创建存储过程。
@in float输入形式参数。
@out float output --输出形式参数。
asdeclare @i int
declare @s float
set @i=1
set @s=1
while @i<=@in
beginset @s=@s*@i
set @i=@i+1
endset @out=@s给输出参数赋值。
调用存储过程:
declare @ou float –定义变量,用于存储结果值。
exec factorial 5,@ou out --实参表。
print @ou
请给出执行结果:
在【对象资源管理器】窗口中,展开“数据库”节点,再展开所选择的具体数据库节点,再展开选择“可编程性”节点,右击“函数”,选择“新建”命令,在下一级菜单中选择适合的选项,如图所示:
在右侧查询编辑器**现函数的模板,可以在此基础上编辑函数,单击“执行”按钮,即可创建该函数。
函数分为标量函数和表值函数。前者返回一个标量值结果,在创建函数时,应在returns语句后指明标量类型(如:int );后者以表的形式返回结果,在创建函数时,应在returns语句后用关键词table指时其反回类型。
在查询分析器里可使用t-sql可直接创建函数。
格式:create function 函数名(
形参名类型。
变参名类型。
returns 类型]
as sql语句。
标量函数接受0个或多个输入参数,并返回一个标量值。因为标量函数只返回一个值,所以通常在一个select语句的列列表中使用它们,也可以在where子句中使用它们。
实验14-7:基于cp表编写函数getstock( )根据传进的参数“产品编号”,查询并返回相应产品的“库存量”。
请阅读以下程序,理解其基本结构和实现思想,给出运行结果。
调用函数:函数一般在select语句或where子句中被调用,以下是一函数调用实例:
请给出执行结果:
表值函数遵守与标量函数相同的规则,区别在于表值函数返回一个表作为输出。因此,一般在select语句的from子句中使用它们,并可能与其他表或视图进行联接。
实验14-8:创建一个自定义函数fun_cpinfo(),根据产品编号返回该产品的名称、**和库存量。
create function fun_cpinfo(@product_no char(6))
returns table --表值函数,返回查询结果集(即表)
asreturn( select 产品名称,**,库存量。
from cp
where 产品编号=@product_no)
调用函数:函数创建后,可在sql语句中调用。调用函数fun_cpinfo(),可在查询分析器中执行如下select语句:
请给出执行结果:
思考:请比较标量函数和表值函数,理解其在编写和使用上的差别。
对于cpxs数据库,完成以下存储过程。
编写一无参存储过程用于查询每个客户购买产品的情况(包括客户编号、产品编号、客户名称、产品名称、**、购买日期、购买数量),然后调用该存储过程。
请给出程序源码:
create proc kh_cp_info
asselect cpxsb.客户编号,cpxsb.产品编号,客户名称,产品名称,**。
销售日期,数量。
from cp,xss,cpxsb
where cp.产品编号=cpxsb.产品编号。
and xss.客户编号=cpxsb.客户编号。
请给出执行测试结果:
编写一加密存储过程,查询指定客户购买产品的情况。并调用该存储过程查询客户编号为“000002”的客户购买情况。
请给出程序源码:
create proc kh_info
khbh char(6)
with encryption
asselect cpxsb.客户编号,cpxsb.产品编号,客户名称,产品名称,**。
销售日期,数量。
from cp,xss,cpxsb
where xss.客户编号=@khbh
and cp.产品编号=cpxsb.产品编号。
and xss.客户编号=cpxsb.客户编号。
请给出执行测试结果:
编写一存储过程,查询指定产品的销售情况。如果没有提供参数,则查询产品名称中包含有“冰箱”的产品销售情况。
请给出程序源码:
create proc cp_infor
mc varchar(20)='冰箱%'
asselect cpxsb.客户编号,cpxsb.产品编号,客户名称,产品名称,**。
销售日期,数量。
from cp,xss,cpxsb
where
cpxsb.产品编号in
select 产品编号from cp where 产品名称like @mc)
and cp.产品编号=cpxsb.产品编号。
and xss.客户编号=cpxsb.客户编号。
请给出执行测试结果:
编写一存储过程,查询指定客户在指定时间段内购买指定产品的数量,存储过程中使用了输入和输出参数。并调用该存储过程查询名称为“家电市场”的客户在2023年购买“洗衣机”的数量。
请给出程序源码:
请给出执行测试结果:
编写一带有output游标参数的存储过程,游标结果集为客户信息,并通过调用该存储过程,实现依次读取游标cur2中各行数据。
请给出程序源码:
请给出执行测试结果:
6. 创建一个多表查询的存储过程。
问题:查询在2023年9月18日有销售的产品名称(若无此数据,请先添加之,以便于测试)。
1)请给出相应的**。
create function cp_name(@cp_name char(10))
信息存储与检索实验
班级 信管111 学号 111406070137 姓名张红燕。指导教师蔡羽。实验一 搜索引擎的工作原理及资源获取方法与技巧。实验学时 2学时。一 实验目的和要求。1 实验目的 理解搜索引擎的工作原理,熟练使用google lycos等搜索引擎,灵活掌握资源获取方法与技巧。2 实验对象 interne...
10函数与过程
函数与过程。有些问题的程序太长或太复杂,编起来就会比较困难,如果我们利用搭积木的原理将大的复杂的问题分解成更小 更简单的问题,即 化整为零 问题就会比较容易解决,这就是机构化程序设计思想。在pascal中合理使用函数和过程是实现 化整为零 的重要手段。函数。在pascal中已经提供了很多的标准函数,...
信息存储与检索实验作业
信息存储与检索。一 实验目的。1 了解信息存储的背景。信息检索起源于图书馆的参考咨询和文摘索引工作,从19世纪下半叶首先开始发展,至20世纪40年代,索引和检索成已为图书馆独立的工具和用户服务项目。随着1946年世界上第一台电子计算机问世,计算机技术逐步走进信息检索领域,并与信息检索理论紧密结合起来...