機房收費系統——預存程序的運用,收費系統預存程序

來源:互聯網
上載者:User

機房收費系統——預存程序的運用,收費系統預存程序

       在機房收費系統中的“結賬”部分,要求選中操作員然後點擊“結賬”按鈕後,將該操作員辦理的註冊、充值、退卡業務的狀態改為“已結賬”。註冊、充值和退卡分別記錄在三張表中,如果按照傳統的辦法,需要在DAL層寫三個函數,分別update每張表的isCheck為“true”,且不說寫多少代碼,費多少力氣,這樣還降低了系統的運行速度,容易出錯。

       在個人版機房收費系統重構中,我們不是像以前那樣只要功能實現即可,而是變“懶”了,對重複的工作Say No,在這裡就引入了預存程序來解決這個問題。預存程序是使用SQL語句和流程式控制制語句編寫的模組,經編譯和最佳化後儲存在資料庫伺服器端的資料庫中,使用時調用即可。


1.預存程序的建立:

選擇要使用預存程序下的“可程式化性”,點開“+”號選擇"預存程序",右擊在捷徑功能表中選擇"建立預存程序",然後顯示出如下的介面。咋一看有好多代碼,其實就是個模板,我們只需填寫一下。




注意:要在參數後註明資料類型,和資料庫中相應的欄位類型保持一致。


2.使用預存程序的D層代碼:

  '結賬後將該使用者操作的業務[儲值,退卡,註冊卡]isCheck改為true    Public Function UpdateIsCheck(ecard As Card) As Boolean Implements ICheckOut.UpdateIsCheck        Dim sqlHelper As New SqlHelper.sqlHelper   '執行個體化sqlHelper類          Dim cmdType As <strong>CommandType</strong> = CommandType.StoredProcedure '定義命令類型,預存程序        <strong>Dim cmdText As String = "PROC_CheckOut"  </strong> '資料庫執行字串          '傳參          Dim params As SqlParameter()        params = {New SqlParameter("@ischeck", ecard.ProisCheck),                             New SqlParameter("@userID", ecard.ProuserID)}        Return sqlHelper<strong>.ExecuteNoQuery(cmdText, cmdType, params)</strong>    End Function

3.使用SQL語句的代碼:

Public Function ModifyPwd(euser As User) As Integer Implements IPwd.ModifyPwd        Dim strSQL As String = "update T_User set userPwd =@pwd where userID=@userID"        Dim params() As SqlParameter = {New SqlParameter("@pwd", euser.ProuserPwd), New SqlParameter("@userID", euser.ProuserID)}        Dim helper As New SqlHelper.sqlHelper        Dim result = helper.ExecuteNoQuery(strSQL, CommandType.Text, params)        Return result    End Function


         通過以上對比,發現其實預存程序的使用很簡單,只需更改 CommandType 為StoredProcedure,不用小心翼翼地寫SQL語句,而是換成寫好的預存程序的名稱。

         相對於直接使用SQL語句,在應用程式中直接調用預存程序有以下好處:減輕了程式編寫的工作量,降低了網路通訊量。調用一個行數不多的預存程序與直接調用SQL語句的網路通訊量可能不會有很大的差別,可是如果預存程序包含上百行SQL語句,那麼其效能絕對比一條一條的調用SQL語句要高得多。由於在預存程序建立的時候,資料庫已經對其進行了一次解析和最佳化。預存程序一旦執行,在記憶體中就會保留一份這個預存程序,這樣下次再執行同樣的預存程序時,可以從記憶體中直接調用,從而提高了執行速度。同時增強了SQL的功能和靈活性,間接實現安全控制功能。

         這是第一次使用預存程序,今後還會不斷地學習和運用。邁出了第一步,前邊的路就好走了。



學校機房收費系統

百度搜尋 網吧管理系統或者機房計費系統,可以發現有好多。
 
oracle中運用預存程序調用函數

我也來做,以下程式經過測試,正常擷取cost值,插入收銀資訊表正常!!
--建立表
CREATE TABLE member_info(
memberid NUMBER,
memberlevel VARCHAR2(20),
memberdis NUMBER)
;
CREATE TABLE cost_info(
memberid NUMBER,
spend FLOAT,
COST FLOAT)
;

INSERT INTO member_info VALUES(1,'A',0.1);
INSERT INTO member_info VALUES(2,'A',0.2);
INSERT INTO member_info VALUES(3,'A',0.3);
INSERT INTO member_info VALUES(4,'A',0.4);
--建立函數
CREATE OR REPLACE FUNCTION function_mem(p_memeberid member_info.MEMBERID%TYPE,p_spend cost_info.SPEND%TYPE)
RETURN FLOAT
IS
v_cost cost_info.COST%TYPE;
v_memberdis member_info.MEMBERDIS%TYPE;
BEGIN
SELECT memberdis INTO v_memberdis FROM member_info WHERE memberid = p_memeberid;
v_cost := v_memberdis* p_spend;
RETURN v_cost;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END ;
--建立procedure
CREATE OR REPLACE PROCEDURE proc_mem(p_memeberid member_info.MEMBERID%TYPE,p_spend cost_info.SPEND%TYPE)
IS
v_cost cost_info.COST%TYPE;
BEGIN
SELECT function_mem(p_memeberid,p_spend) INTO v_cost FROM dual;
INSERT INTO cost_info VALUES(p_memeberid,p_spend,v_cost);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
dbms_output.put_line(SQLERRM);

END;
----執行procedure
BEGIN
proc_mem(1,1000);
END;...餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.