熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

N Tier體系結構解決方案

2013-11-13 15:56:20  來源: Oracle 

  企業級N Tier體系結構解決方案討論NT+Oracle
  Oracle可以說是現在業界內最為常見也是最為成功的關系數據庫(DBMs)產品說它成功一是因為它的性能優越二是它的平台支持最為廣泛三是它為常見的前台開發工具提供了應用的接口在這裡我還要談一個問題那就是我在這篇討論方案的文章中對於前台的解決方法只討論ASP和JSP為什麼不討論現在很流行的PHP呢?因為我覺得作為一種SCRIPT語言上述的三種方案沒有太大的差別這裡的差別主要是指功能上的差別而不去關心性能上的微小差異有人專門測試了幾種方案毫秒級的數值差異我個人覺得這裡的性能主要取決於第三層(數據庫)上的性能這時的差異是我們可以深刻體會到的(笑)其實更為重要的是每種解決方案所支持的元件模型ASP支持ActiveX而JSP支持JavaBean這兩種元件都有巨大的支持例如標准的ASP不支持文件上傳的功能我們就可以開發一個文件上傳的組件同樣的情況在JSP中也能實現PHP呢?可以是可以的但需要做的工作就不僅僅是開發組件那麼簡單了所以前面的兩種方案明顯有很大的優勢
  
  本篇討論的是使用ADO模型通過ODBC的方法與Oracle相連當然我們也可以使用Oracle使用的專用模型(OOO)我們會在後面討論既然使用的是ADO模型所以我們可以很快的從前面的SQL Server中過渡過來語法都是相同的對象當然也是相同的所以我就只需要指出不同的地方和它特別的地方就可以了其實我們更應該關注的兩種DBMs之間的差別也正是DBMs之間的差別才造成了方案之間的差別兩種DBMs都支持Standerd SQL但它們又都各自擴展了標准SQL的功能形成了自己獨特的SQL——SQL Server的Transaction SQL和Oracle的PL/SQL它們都提供了例如StoredProcedureTrigger等等對象這些也是我們要重點討論的地方Oracle的PL/SQL在語法上更容易理解下面我來舉一個例子這個例子若用常規的方法要使用多次的數據庫連接很是麻煩下面看問題的描述
  
  這是一個修改密碼的例子要求我們先輸入以前的密碼只有在輸入與以前的密碼吻合時才更新新的密碼程序有三個輸入舊的密碼新的密碼以及確認的密碼新密碼與確認密碼的吻合我們不用數據庫來驗證但舊密碼是必須從數據庫中讀出的用傳統的方法起碼要用到兩個SQL語句但寫成一個Oracle的Procedure就可以象下面所示的那樣
  
  Create or Replace Procedure proc_pass_change
  
  ( member_id in varchar
  
  org_pass in varchar
  
  new_pass in varchar
  
  status out number status是一個標志量當為時表示成功1代表舊密碼不符其它的值代表過程出錯
  
   )is
  
  tmp_pass varchar();
  
  begin
  
  select mem_pass into tmp_pass from personal_beadroll
  
  where mem_id=member_id;
  
  if tmp_pass=org_pass then
  
  update mem_pass=new_pass from personal_beadroll
  
  where mem_id=member_id;
  
  status:=;
  
  else
  
  status:=;
  
  end if;
  
  commit;
  
  exception
  
  when others then
  
  rollback;
  
  status:=;
  
  raise;
  
  end;
  
  上面的這個Procedure中定義了一個中間的變量tmp_pass使用這個中間變量來保存第一個Select into語句選出的數據庫中的舊有密碼然後用它和用戶的輸入做比較如果是正確的就執行更新的過程否則返回一個用於判斷的過程值為什麼要用Select into呢?這是因為在Procedure中不支持選出一個記錄集而Select into其實是一個隱含的Cursor所以我們還可以這樣來實現剛才的這個Procedure
  
  Create or Replace Procedure proc_pass_change
  
  ( member_id in varchar
  
  org_pass in varchar
  
  new_pass in varchar
  
  status out number status是一個標志量當為時表示成功1代表舊密碼不符其它的值代表過程出錯
  
   )is
  
  Cursor csr_pass is
  
  Select mem_pass from personal_beadroll
  
  Where mem_id=member_id and mem_pass=org_pass;
  
  begin
  
  open csr_pass;
  
  if csr_pass%FOUND then
  
  update mem_pass=new_pass from personal_beadroll
  
  where mem_id=member_id;
  
  status:=;
  
  else
  
  status:=;
  
  end if;
  
  commit;
  
  close csr_pass;
  
  exception
  
  when others then
  
  rollback;
  
  status:=;
  
  raise;
  
  end;
  
  它的實現思想是首先我們產生一個密碼和ID都符合的記錄集若這個記錄集存在的話就證明了該用戶輸入的原始密碼有效此時csr_pass%FOUND條件為真於是我們就可以進行密碼的更新工作了
  
  從上面的例子我們可以看到當我們的事務是復雜的SQL語句時我們使用Procedure的優越性是明顯的
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/17546.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.