程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle數據庫游標案例講解與源碼(2)

Oracle數據庫游標案例講解與源碼(2)

編輯:Oracle教程

Oracle數據庫游標案例講解與源碼(2)


關於此案例的詳細分析,請參看 《Oracle數據庫游標案例講解與源碼》一文

http://www.Bkjia.com/database/201504/393681.html

案例要求:
利用游標轉換兩張表的數據。
首先,將滿足以下三個條件的數據插入到一張新表(productinfo_tmp)中 :
<1>價格大於1000
<2>產地為“中國”或“杭州”
<3> 商品類型為“家電”或“電子產品”
然後,在新表(productinfo_tmp)中進行如下兩個操作:
<1>價格大於2000的下調5%

<2>商品類型編號轉換為商品類型名稱

由於《Oracle數據庫游標案例講解與源碼》一文中的解決方案用到了子查詢與游標,將會造成更大的系統開銷,造成查詢速度變慢,因此可以講解決方案更改為下面方式:

(建表語句與插入數據,請參照《Oracle數據庫游標案例講解與源碼》一文)

 

create or replace procedure prcd_1
is
begin
  --清空臨時表中的原有記錄
  delete from productinfo_tmp;
  --把符合要求的數據查詢出來,插入新的數據並轉換CATEGORY字段
  insert into productinfo_tmp (pid,PNAME,PRICE,QUANTY,CATEGORY,DESPERATION,origin)
  select pid,PNAME,PRICE,QUANTY,CATEGORY,DESPERATION,origin from productinfo,categoryinfo
  where productinfo.category=categoryinfo.CID
  and PRICE>1000 and origin in('中國','杭州') and CNAME in ('電子產品','家電');    
   --產品價格下調
  update productinfo_tmp set productinfo_tmp.PRICE=productinfo_tmp.PRICE*0.95
  where productinfo_tmp.PRICE>2000;
 
  commit;   
end prcd_1;

這樣既避免了子查詢,又不用使用游標,可以很大的提高存儲過程的執行效率!


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved