函数,游标与存储过程的综合应用

--在TOY数据库中完成以下操作
use toy
go
--1、编写一个存储过程,接收任意一个订单号,打印订单的表头数据。格式如下:
--(其中订单编号由订单日期+订单号的字符串组成)
--订单编号:20010520000001   订货日期:2001-05-20   订货人:拉尔森
create procedure proc_order
(@orderid as varchar(6))
as
begin
 declare @ord varchar(6),@name varchar(10),@time datetime
 select @ord=[定单号],@name=[名],@time=[定单日期] from [dbo].[定单],[dbo].[购物者]
  where [dbo].[定单].购物者号=[dbo].[购物者].购物者号 and [定单号]=@orderid
 print '订单编号:'+Convert(varchar(12),@time,112)+@orderid+'   订货日期:'+Convert(varchar(10),@time,120)+'  订货人:'+@name
end
go
execute proc_order '000001'
go
--2、编写一个存储过程或函数,接收订单号、玩具号、输出该订单中该种玩具的销售金额。
--其中,玩具的销售金额=玩具单价* 订单中玩具的购买数量*折扣率,折扣率的处理规则如下:
--玩具的销售金额    折扣
------------------------------------------------------------
--[0-30)            1.0
--[30-50)             0.9
--[50-100)      0.8
--[100以上           0.7
create proc proc_dis
(@orderid varchar(6),@wjid varchar(6),@salemoney decimal(8,2) output)
as
begin
 declare @money decimal(8,2);
 select @money=价格*购买数量 from [dbo].[玩具],[dbo].[定单详情] where [dbo].[玩具].玩具号=[dbo].[定单详情].玩具号
 and [定单详情].定单号=@orderid and [定单详情].玩具号=@wjid
 select @salemoney=@money*
  case when @money<30 then 1.0
    when @money>=30 and 价格<50 then 0.9
    when @money>=50 and 价格<100 then 0.8
    when @money>100 then 0.7
  end  from [dbo].[玩具],[dbo].[定单详情] where [dbo].[玩具].玩具号=[dbo].[定单详情].玩具号
  and [定单详情].定单号=@orderid and [定单详情].玩具号=@wjid
end
go
declare @salemoney decimal(8,2)
execute proc_dis '000001','000007',@salemoney output
select @salemoney
go
--3、编写一个存储过程,接收一个订单号,调用上述存储过程打印输出该订单下的所有玩具的明细信息。例如:输入订单号000001,则打印格式如下:

--玩具编号   玩具名称                         购买数量    单价     金额
--------   ------------------------------   --------   ------   ------
--000007     tie dye kit?工具箱              2          20      36
--000008     爱丽丝奇境记                     1          15       15
create proc proc_dtinfo
(@orderid varchar(6))
as
begin
 print '玩具编号   玩具名称                  购买数量    单价     金额 '
 print '--------   -----------------------   --------   ------   ------'
 declare @wjid varchar(6),@wjname varchar(20),@num int,@price decimal(8,2)
 declare cur cursor
 for select [玩具].玩具号 from [定单详情],[玩具] where [定单详情].玩具号=[玩具].玩具号 and [定单详情].定单号=@orderid
 open cur
  fetch next from cur into @wjid
  while @@fetch_status=0
  begin
   declare @salemoney decimal(8,2)
   execute proc_dis @orderid,@wjid,@salemoney output
   select @wjname=[玩具].玩具名,@num=[定单详情].购买数量,@price=[玩具].价格,@salemoney=@salemoney from [定单详情],[玩具] where [定单详情].玩具号=[玩具].玩具号
   and [定单详情].定单号=@orderid and [玩具].玩具号=@wjid
   print @wjid+'    '+@wjname+'      '+str(@num)+'   '+Convert(varchar(10),@price)+'    '+Convert(varchar(10),@salemoney)
   fetch next from cur into @wjid
  end
 close cur
 deallocate cur
end
go
exec proc_dtinfo '000001'
go
--4、编写一个存储过程,接收一个订单号,计算出该订单的总金额,并输出。(总金额=该订单中所有玩具的销售金额+订单的运输费用)。
create proc p_sum
(@orderid varchar(6))
as
begin
 declare @ysmoney decimal(8,2),@wjid varchar(6),@sum decimal(8,2)
 set @sum=0;
 select @ysmoney=[定单].运输价格 from [dbo].[定单] where [定单].定单号=@orderid
 declare cur cursor
 for select 玩具号 from [dbo].[定单详情] where [定单详情].定单号=@orderid
 open cur
  fetch next from cur into @wjid
  while @@FETCH_STATUS=0
  begin
   declare @salemoney decimal(8,2)
   execute proc_dis @orderid,@wjid,@salemoney output
   set @sum=@sum+@salemoney;
   fetch next from cur into @wjid
  end
  print '总金额:'+ltrim(str(@sum+@ysmoney));
 close cur
 deallocate cur
end
go
exec p_sum '000001'
go
--5、编写一个存储过程,接收一个订单号,打印出该订单的附加信息(包括:运送方式、接受者姓名、接受者地址、邮政编码和联系电话)。
--例如:输入订单号000001,则打印格式如下:
--运送方式:标准航运                 运送金额:6
--接收者姓名:约翰逊
--接收者地址:美国加利福尼亚州桑德兰227 海滨大道.
--邮政编码:94087-1147
--电话号码:123-5673      
create procedure proc_fjinfo
(@orderid varchar(6))
as
begin
 declare @fsm varchar(10),@ysmoney decimal(8,2),@name varchar(20),@gjname varchar(20),@zname varchar(20),@city varchar(20),
 @address varchar(200),@yb varchar(10),@phone varchar(10)
 select @fsm=[运输方式].方式名,@ysmoney=运输价格,@name=[接受者].名,@gjname=[国家].国家名,@zname=[接受者].州,@city=[接受者].城市,
 @address=[接受者].地址,@yb=[接受者].邮编,@phone=[接受者].电话 from [dbo].[定单]
  inner join [dbo].[运输方式] on [dbo].[运输方式].方式号=[dbo].[定单].运输号
  inner join [dbo].[接受者] on [dbo].[接受者].定单号=[dbo].[定单].定单号
  inner join [dbo].[国家] on [dbo].[国家].国家号=[接受者].国家号 and 定单.定单号=@orderid
 print '运送方式:'+@fsm+'    '+'运送金额:'+ltrim(str(@ysmoney))
 print '接收者姓名:'+@name
 print '接收者地址:'+rtrim(@gjname)+ltrim(rtrim(@zname))+ltrim(rtrim(@city))+ltrim(@address)
 print '邮政编码:'+@yb
 print '电话号码:'+@phone
end
go
execute proc_fjinfo '000001'
go
--6、编写一个存储过程,接收一个订单号,调用上述的所有存储过程打印出订单的完整信息。格式如下:
--例如:输入订单号000001,则打印格式如下:
--                               订 货 单                              
--======================================================================
--订单编号:20010520000001   订货日期:2001-05-20   订货人:拉尔森
--======================================================================
--玩具编号   玩具名称                         购买数量    单价     金额
--------   ------------------------------   --------   ------   ------
--000007     tie dye kit?工具箱              2          20      36
--000008     爱丽丝奇境记                     1          15       15
--======================================================================
--运送方式:标准航运                 运送金额:6
--接收者姓名:约翰逊
--接收者地址:美国加利福尼亚州桑德兰227 海滨大道.
--邮政编码:94087-1147
--电话号码:123-5673      
--======================================================================
--总金额:57
create proc p_detail
(@orderid varchar(6))
as
begin
 print '                               订 货 单                               '      
 print '======================================================================'
 exec proc_order @orderid
 print '======================================================================'
 exec proc_dtinfo @orderid
 print '======================================================================'
 exec proc_fjinfo @orderid
 print '======================================================================'
 exec p_sum @orderid
end
go
exec p_detail '000001'
go
--7、创建一个函数,根据所给玩具号及数量,计算应支付的金额。
create function fun_pay(@wjid varchar(6),@num int)
returns decimal(8,2)
begin
 return @num*(select [价格] from [dbo].[玩具] where [玩具号]=@wjid)
end
go
select dbo.fun_pay('000007',2);
go
--8、创建一个函数,根据给定的订单号,求出该订单的详细购物情况(订单号、玩具名、数量)。
create function fun_detinfo(@orderid varchar(6))
returns table
as
 return (select 定单号,玩具名,购买数量  from [dbo].[定单详情] inner join dbo.玩具 on dbo.玩具.玩具号=[定单详情].玩具号
         where 定单号=@orderid)
go
select * from dbo.fun_detinfo('000001')
go

转载于:https://www.cnblogs.com/zhouqiang0701/p/6438863.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HALCON示例程序check_blister.hdev药品胶囊检测

HALCON check_blister.hdev药品胶囊检测 示例程序源码&#xff08;加注释&#xff09; 显示、读入图片、设置显示字体等&#xff0c;之前的帖子已经介绍过了 dev_close_window () dev_update_off () read_image (ImageOrig, ‘blister/blister_reference’) dev_open_window_f…

【机器学习实战】——常见函数积累

目录 第二章 k近邻算法 1、array.sum(axies 1) : 2、array.argsort(axies0/1) 3、array.tile(mat,(m,n)) 4、dict.get(key,value) 5、sorted函数 6、string.strip()函数 7、string.split() 8、scatter&#xff08;&#xff09;函数 9、min()&max() 10、enumera…

安装oracle 11g 客户端,检查过程中报物理内存不足的解决

今早接到同事电话&#xff0c;说安装oracle 11g客户端的时候&#xff0c;在检查先决条件的时候&#xff0c;报错&#xff0c;说内存不足&#xff0c;但是本机的内存是2G&#xff0c;肯定够用&#xff1a;如图&#xff1a; 找了一圈&#xff0c;原来Oracle执行先决条件检查是依赖…

智能时代 软件赋能——2017中国软件技术大会

由中国科学院软件研究所、中科软科技股份有限公司联合主办&#xff0c;北京中科凯亚科技有限公司协办的第15届中国软件技术大会将于2017年12月在北京 国家会议中心隆重举行。 毋庸置疑&#xff0c;我们正在迈入智能时代&#xff0c;伴随着物联网、云计算、大数据、人工智能等智…

Arduino 代码机制

新建一个Arduino程序。可是建完就郁闷了&#xff0c;因为只看到了setup和loop函数&#xff0c;却没有基本的c函数。 void setup() {// put your setup code here, to run once: }void loop() {// put your main code here, to run repeatedly: }于是好奇心就来了&#xff0c;当…

Codeforces Round #401 (Div. 2) D. Cloud of Hashtags

题目链接&#xff1a;D. Cloud of Hashtags 题意&#xff1a; 给你n个字符串&#xff0c;让你删后缀&#xff0c;使得这些字符串按字典序排列&#xff0c;要求是删除的后缀最少 题解&#xff1a; 由于n比较大&#xff0c;我们可以将全部的字符串存在一个数组里面&#xff0c;然…

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 示例程序源码&#xff08;加注释&#xff09; 读入图片与显示相关设置 dev_close_window () read_image (Image, ‘blister/blister_mixed_reference’) dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHan…

php类与对象

1.类与对象 对象&#xff1a;实际存在该类事物中每个实物的个体。$a new User(); 实例化后的$a 引用&#xff1a;php的别名&#xff0c;两个不同的变量名字指向相同的内容 封装: 把对象的属性和方法组织在一个类&#xff08;逻辑单元&#xff09;里 继承&#xff1a;以原有的类…

【深度学习系列】基础知识、模型学习

基础知识 原创 【深度学习】——训练过程 原创 【深度学习】——BN层&#xff08;batch normalization&#xff09; 原创 【深度学习】——激活函数&#xff08;sigmoid、tanh、relu、softmax&#xff09; 原创 【深度学习】——损失函数 原创 【深度学习】——梯度下…

史陶比尔机器人的 LLI (Low Level Interface)

史陶比尔机器人的 LLI &#xff08;Low Level Interface&#xff09; 史陶比尔机器人拥有 Low Level Interface (LLI)接口选项. 在CS8C控制器的时代&#xff0c;LLI 接口仍然可用。这是一个选项接口。.这是除了VAL3编程语言之外的替代操作系统。通过C程序替代你的程序。 这里的…

阳狮集团与阿里巴巴全域营销伙伴关系再升级:数据和业务合作将更紧密

3月6日&#xff0c;阿里巴巴集团与全球领先的广告传播集团阳狮集团在上海开启了主题为“新局面新高度”新阶段的合作沟通&#xff0c;未来双方将进行更紧密的数据和业务层面的合作。阿里巴巴集团CMO、阿里妈妈总裁董本洪及阳狮媒体大中华区首席执行官张敬鸾就开放共赢达成共识&…

HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测

HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测 示例程序源码&#xff08;加注释&#xff09; 获取系统关于“空白区域储存的设置” get_system (‘store_empty_region’, StoreEmptyRegion)系统“空白区域储存”设置为 ‘false’ set_system (‘store_empty_regi…

#undef 标识符

#undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef 标识符 其中&#xff0c;标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称&#xff0c;那么就会忽略该指令。一旦定义预处理器标识符&#xff0c;它将保持已定义状态且在作用域内&#xff0c;直到程序结束…

[转]OpenGL库介绍

原帖地址&#xff1a;http://blog.csdn.net/yyyuhan/archive/2008/01/15/2045009.aspx 开发基于OpenGL的应用程序&#xff0c;必须先了解OpenGL的库函数。它采用C语言风格&#xff0c;提供大量的函数来进行图形的处理和显示。OpenGL库函数的命名方式非常有规律。所有OpenGL函数…

SQL Server优化50法

查询速度慢的原因很多&#xff0c;常见如下几种&#xff1a; 1、没有索引或者没有用到索引(这是查询慢最常见的问题&#xff0c;是程序设计的缺陷) 2、I/O吞吐量小&#xff0c;形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 …

HALCON示例程序check_fish_stick_dimension.hdev生鱼棒尺寸测量;基于形态学的像素级精度尺寸测量

HALCON示例程序check_fish_stick_dimension.hdev基于形态学的像素级精度尺寸测量 示例程序源码&#xff08;加注释&#xff09; 关闭实时显示更新 dev_update_off () 关闭窗口 dev_close_window () 读入图片 read_image (Image, ‘food/fish_sticks_raw_01’) 根据给定长宽…

单片机平台的最小偏差圆弧插补算法

在CNC机床的G代码中&#xff0c;最常见的有G0、G1、G2、G3代码&#xff0c;分别表示直线和圆弧插补&#xff0c;直线插补对于单片机来说&#xff0c;比较容易实现&#xff0c;只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了&#xff0c;但对于圆弧插补&#xff0c;…

javascript基础--数组排序

字符串的排序 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>数组排序</title><script>var arr [fliar, asdf, dfe, loii, yhhl];arr.sort();alert(arr);</script> </head>&…

【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

Lua基本语法-lua与C#的交互(相当简单详细的例子)

lua脚本 与 C#的交互 本文提供全流程&#xff0c;中文翻译。Chinar坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互准备工作 2C# Create Lu…