函數,游標與存儲過程的綜合應用

--在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.pswp.cn/news/255292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255292.shtml
英文地址,請注明出處:http://en.pswp.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…