儲存過程
儲存過程(stored procedure)是在大型
資料庫系統
①重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。
②減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。
③安全性。引數化的儲存過程可以防止sql注入式攻擊,而且可以將grant、deny以及revoke許可權應用於儲存過程。
簡單講:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權
任何事物都是有兩面性的,有優點必然會有缺點:
1:除錯麻煩,但是用 pl/sql developer 除錯很方便!彌補這個缺點。
2:移植問題,資料庫端**當然是與資料庫相關的。但是如果是做工程型專案,基本不存在移植問題。
3:重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。
4: 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。
下邊用我的機房做個例子:
在登入時會在onwork 表增加記錄,同樣在關閉程式的時候就要在worklog表中新增記錄,同時刪除onwork表中對應的記錄。
ui層的**:獲得需要的資訊
private void 退出toolstripmenuitem_click(object sender, eventargs e)
}
外觀、b層、還有工廠和介面的寫法,跟其他訪問資料庫的寫法一樣。
d層**:
public int offwork(login.modle.worklog offwork)
;string store = "pro_offwork"; //此處不用寫sql語句,寫儲存過程的名字就行
int back = sqlhelper.deletesqlhelper.delectetable(store, para, commandtype.storedprocedure);
return back;
}
寫sql語句的地方寫成儲存過程名字就行,另外sqlhelper中的引數型別也要寫成:commandtype.storedprocedure
儲存過程中的**:
儲存過程一般與事物一起使用,因為事務具有原子性和一致性。
alter procedure [dbo].[pro_offwork] --儲存過程名字
-- add the parameters for the stored procedure here
--定義下邊要用到的字段。
@userid char(10),
@logoutdate datetime,
@logouttime time(0),
@status char(10)
asdeclare @logintime time(0)
begin
declare @error int ---宣告事物變數
set @error=0 --給事物變數賦值
begin transaction --事物開始語句
select @logintime =logintime from onwork_info where userid =@userid
--刪除onwork表中相應的資料
delete from onwork_info where userid=@userid
set @error =@error+@@error --事物
--更新worklog表中相應的資料。
update worklog_info set logoutdate =@logoutdate ,logouttime =@logouttime,status =@status where userid =@userid and logintime =@logintime
set @error =@error+@@error --事物
if @error <>0
rollback --發生錯誤時回滾
else
commit --不發生錯誤時執行語句
end
到這裡關閉程式所需要的功能就完成了。
假如我們不用儲存過程,一般的思路可能就是,先訪問資料庫,刪除onwork表中的資料,然後再次進入資料庫,在worklog表中新增記錄,這樣就要訪問兩次資料庫。這樣無形中會增加很多**,但是用儲存過程就只訪問一次資料庫就可以了,可以少寫好多**,提高我們的工作效率。
多學一些知識,多嘗試著使用這些知識,你會收穫很多,能提高我們的學習工作效率。
機房重構 儲存過程
在機房重構過程中七層的主線明白了以後就剩下大量的敲 了,這一過程無疑比較枯燥,因此有必要在機房中嘗試一些新東西,比如,儲存過程。那麼什麼是儲存過程呢?儲存過程是存放在伺服器上的預先編譯好的sql語句,在第一次執行時進行語句檢查和編譯,編譯好的儲存過程在快取記憶體中用於後續呼叫,這樣就可以使儲存過程執...
機房重構 儲存過程
儲存過程 stored procedure 是使用transact sql語言編寫的一段能實現指定功能的程式。其次,這種程式被sql server編譯好後,存放在sql server資料庫中。使用者可以通過儲存過程的名稱和引數傳遞呼叫這些具有指定功能的儲存過程。儲存過程也是資料庫物件。人們通常使用儲...
機房重構 儲存過程
什麼都不說直接上 使用儲存過程其他層的 相同只有dal層 不同.dal層 寫乙個檢查卡號是否存在,新增 public class chackcarddal implements idal.ichackcardidal 寫乙個方法 public function chackcard cardinfo ...