实验14存储过程与函数

发布 2022-06-29 05:49:28 阅读 5894

【实验目的与要求】

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年世界上第一台电子计算机问世,计算机技术逐步走进信息检索领域,并与信息检索理论紧密结合起来...