第十九章
完善的Stored Procedures
•可讀性
•為了使代碼更具可讀性
–使用註釋
–使用白色空間縮排代碼
–使用白色的空間來放置成列的代碼
–於一個單一的代碼塊中的聲明和初始化變量
•建立一套代碼的可讀性做法
•查輸入參數值
•Adaptive Server的驗證,只傳遞給參數的值是正確的數據類型
•存儲過程應該確認是正確的域值傳遞
•缺少參數的錯誤訊息
•有效的存儲過程需要輸入參數包括一個對使用者有善的錯誤訊息確定哪些參數必須傳遞到存儲過程
•Transaction 模式標籤
•你無法運行在交易transaction 模式不符合的標籤
•sp_procxmode [ procedure_name [ , { chained | unchained | anymode } ] ]
•您可以查看和更改一個過程的交易模式
•返回狀態
•返回狀態是一個值,該值指示程序是否成功完成
•返回狀態值
•語法
create proc procedure_name
as
statements
return [ return_status ]
•擷取返回狀態值
•返回值必須在變數中捕獲
•語法
[ exec | execute ] variable = procedure_name parameter_list
•無法返回
•無法返回是一個嵌套返回,無法在外部事務中返回工作
•保存點和嵌套返回
•使用保存點,以避免無法返回
•嵌套的程序限制
•存儲過程可以調用其他存儲過程
–嵌套的最高級別是16
–@@nestlevel 記錄當前的嵌套級別
•如果超過最長水平:
–所有等候程序被中止
–Adaptive Server將返回錯誤
•檢查值@@nestlevel 這樣您就不會超過最長的嵌套級別
•查詢計劃的審查
•查詢計劃是有順序的進行查詢所需的步驟,包括資訊
–不論要不要使用索引
–要使用索引
–表中應加入的順序
•由查詢優化程序創建查詢計劃
–查詢優化器使用數據庫對象的資料,生產計劃
•可重複使用存儲過程中創建的查詢計劃
–執行一個存儲過程時,Adaptive Server將檢查未使用的查詢計劃的過程高速緩存
–如果有一個未使用的查詢計劃,Adaptive Server使用
–如果沒有未使用的查詢計劃,Adaptive Server將生成一個新的查詢樹中的sysprocedures
•分項最佳查詢計劃
•查詢計劃創建一個存儲過程的執行可能不是最優的查詢計劃,下次執行存儲過程
–兩個執行可能使用完全不同的輸入參數
–新的索引可能已加兩者之間執行
–訪問表的大小,可能已經改變了顯著的兩次執行之間
•有三種方式來強制服務器產生一個新的查詢計劃
–在過程中使用with recompile
–當程序執行時使用with recompile
–使用執行sp_recompile
•創建與重新編譯程序
•在過程中使用強制服務器上創建一個新的查詢計劃後,每一個程序的執行with recompile選項
•語法
create proc procedure_name
with recompile
as
statements
return
•重新編譯執行程序
•使用with recompile選項,當你執行一個給定的存儲過程強制在服務器上創建一個程序,一個執行新的查詢計劃
•這個選項可以用來執行任何存儲過程
•語法
[ exec | execute ] procedure_name with recompile
•sp_recompile table_name
•使每個存儲過程和觸發使用命名表將重新編譯的下一次運行