240 likes | 319 Views
課程參與度之評估方式. 上課時必須專心聽講,跟上進度,參與討論 扣 分項目 玩線上遊戲一次扣 1 分 玩手機一次扣 1 分 睡覺一次扣 1 分 聊天一次扣 1 分 無法回答老師提出的問題一次扣 1 分 加分項目 主動回答老師的問題一次加 2 分 找出老師程式中的錯誤一次加 1 分 修正老師程式中的錯誤一次加 4 分. MS SQL Server 系統實務 CH10 預存程序. 鄧姚文. 大綱. 為何使用預存程序 預存程序的設計 在應用系統執行預存程序. 10-1 為何使用預存程序 使用預存程序的優點.
E N D
課程參與度之評估方式 • 上課時必須專心聽講,跟上進度,參與討論 • 扣分項目 • 玩線上遊戲一次扣1分 • 玩手機一次扣1分 • 睡覺一次扣1分 • 聊天一次扣1分 • 無法回答老師提出的問題一次扣1分 • 加分項目 • 主動回答老師的問題一次加2分 • 找出老師程式中的錯誤一次加1分 • 修正老師程式中的錯誤一次加4分
大綱 為何使用預存程序 預存程序的設計 在應用系統執行預存程序
10-1為何使用預存程序使用預存程序的優點 接受輸入參數,並以輸出參數的形式將一或多個數值予以傳回 可在資料庫中執行作業 執行完成後傳回狀態值,以指示作業是成功或失敗(及失敗原因) 可進行模組化的程式撰寫 可加快執行速度 可減少網路負荷
10-1為何使用預存程序使用預存程序的優點 • Stored Procedure • 預存程序是此類程序的通稱 • 可分為系統預存程序、 • 觸發程序 Trigger • 一般預存程序
10-1為何使用預存程序建立預存程序 使用CREATE PROCEDURE
10-1為何使用預存程序撰寫程式的原則 • 以下不得用於預存程序中的任何位置 • CREATE DEFAULT、CREATE TRIGGER、CREATE PROCEDURE、CREATE VIEW 、 CREATE RULE • 可以建立其他資料庫物件 • 可以引用暫存資料表 • 建立本機暫存資料表後,該暫存資料表只為該預存程序而存在 • 被呼叫的預存程序可以存取第一個預存程序所建的所有物件 • 參數數量上限是2100個
10-1為何使用預存程序修改預存程序 選取欲更改的預存程序,按下右鍵及點選「修改」
10-1為何使用預存程序執行預存程序 使用EXEC陳述式
10-2 預存程序的相關設計使用參數 • 參數共分輸入、輸出及一個傳回碼 • 參數名稱前須加上@符號,有型態之分 • 預設值-程式10-1 • 取得傳回值-程式10-2
10-2 預存程序的相關設計預存程序的編譯 • WITH RECOMPILE • 每次執行時均重新編譯 • WITH ENCRYPTION • 為預存程序的內容予以加密 • 需要重新編譯的時機是若每次執行預存程序時指定的參數值差異很大
10-2 預存程序的相關設計使用資料指標 資料指標(Cursor) ,「指標」二字的意義是指向特定位置的標示,而特定位置就是記錄
10-2 預存程序的相關設計使用資料指標 • 由開啟至關閉 • 宣告一或多個變數,準備由指標含有的欄位獲得回傳值,每一欄位對應至一個變數。 • 以DECLARE CURSOR宣告資料指標名稱,並設定取出記錄的SELECT語句 • 以OPEN開啟資料指標 • 以FETCH NEXT或FETCH INTO提取各欄位的資料至各個變數 • 以迴圈逐一提取記錄及各欄資料 • 以CLOSE及DEALLOCATE關閉資料指標
10-2 預存程序的相關設計範例資料庫的預存程序
練習 重作 lab-ch09,將每一題的答案都包裝成 Stored Procedure 以 EXEC 執行 Stored Procedure,檢視輸入參數、輸出參數以及傳回值
PIVOT 樞紐分析 語法 SELECT 列名 FROM 來源 PIVOT 值 FOR 欄位 IN (顯示名稱) AS PVT 範例:getCustomerAmount
CREATEPROCEDURE[dbo].[getCustomerAmount] @CustomerCodeVARCHAR(20), @StartDateVARCHAR(10), @EndDateVARCHAR(10) AS SELECT*FROM ( SELECTTOP (100)PERCENT CONVERT(VARCHAR(4),YEAR(OrderDate))+'/'+CONVERT(VARCHAR(2),MONTH(OrderDate))ASYM, CS.CustCnName, SUM(R.WithTaxPriceTW)ASTotal, CS.CustSupCode FROMCustomerSupplierCSINNERJOINOrdersRONCS.CustSupCode=R.CustCode GROUPBYCS.CustCnName,CS.CustSupCode,OrderDate HAVING (CS.CustSupCodeLIKE@CustomerCode+'%')AND (R.OrderDateBETWEEN@StartDateAND@EndDate) ORDERBYCS.CustSupCode )ASx PIVOT(SUM(Total)FORYMIN([2009/1],[2009/2],[2009/3],[2009/4],[2009/5],[2009/6])) ASpvt;
10-3在應用系統執行預存程序Access 開啟Ch10\Ch10-3\Ch1031.mdb 使用ADODB的Command物件 執行預存程序-程式10-10
10-3在應用系統執行預存程序Visual Basic.NET 開啟Ch10\Ch10-3\Ch1032\Ch1302.sln 使用.NET的SqlCommand 物件 執行預存程序-程式10-11