帶你快速了解「存儲過程」的定義及優點

「存儲過程」的定義及優點

存儲過程

sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。應用程序需要用的時候直接調用就可以了,所以效率會高。

存儲過程介紹

存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化後存儲在數據庫服務器中,應用程序使用時只要調用即可。在ORACLE中,若幹個有聯系的過程可以組合在一起構成程序包。

使用存儲過程有以下的優點:

* 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的 運算。

* 可保證數據的安全性和完整性。

# 通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而保證數據的安全。

# 通過存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。

* 再運行存儲過程前,數據庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由于執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執行。

* 可以降低網絡的通信量。

* 使體現企業規則的運算程序放入數據庫服務器中,以便:

# 集中控制。

# 當企業規則發生變化時在服務器中改變存儲過程即可,無須修改任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可以了,應用程序無須任何變化。

數據庫存儲過程的實質就是部署在數據庫端的一組定義代碼以及SQL。

利用SQL的語言可以編寫對于數據庫訪問的存儲過程,其語法如下:

CREATE PROC[EDURE] procedure_name [;number]

[

{@parameter data_type} ][VARYING] [= default] [OUTPUT]

]

[,...n]

[WITH

{

RECOMPILE

| ENCRYPTION

| RECOMPILE, ENCRYPTION

}

]

[FOR REPLICATION]

AS

sql_statement [...n]

[ ]內的內容是可選項,而()內的內容是必選項,

例: 若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫爲:

Create Proc select_del As

Delete tmp

例:用戶想查詢tmp表中某年的數據的存儲過程

create proc select_query @year int as

select * from tmp where year=@year

在這裏@year是存儲過程的參數

例:該存儲過程是從某結點n開始找到最上層的父親結點,這種經常用到的過程可以由存儲過程來擔當,在網頁中重複使用達到共享。

空:表示該結點爲頂層結點

fjdid(父結點編號)

結點n 非空:表示該結點的父親結點號

dwmc(單位名稱)

CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output

as

declare @stop int

declare @result varchar(80)

declare @dwmc varchar(80)

declare @dwid int

set nocount on

set @stop=1

set @dwmc=""

select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold

set @result=rtrim(@dwmc)

if @dwid=0

set @stop=0

while (@stop=1) and (@dwid<>0)

begin

set @dwidold=@dwid

select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold

if @@rowcount=0

set @dwmc=""

else

set @result=@dwmc+@result

if (@dwid=0) or (@@rowcount=0)

set @stop=0

else

continue

end

set @dwmcresult=rtrim(@result)

使用exec pro-name [pram1 pram2.....]

 
帶你快速了解wait等待事件及其處理方法
wait等待事件及其處理方法: 1、db file sequential read 調整SQL,增加buffer cache,加快磁盤讀寫速度 2、log file sync 減少事務提交,將redo文件存放于高速硬盤 3、db file scattered read FTS-調整SQL,增加索引,...查看完整版>>帶你快速了解wait等待事件及其處理方法
 
帶你深入了解DB2數據庫優化的六個准則
本文用幾點了說明DB2數據庫優化需掌握的六個准則 1、對後續用到的表建立索引(注意在插入數據之前建立或者在插入後建立但是要runstats): 說明:插入之前建立的話,在表插入數據的過程中,索引也隨著更新,這樣的話需...查看完整版>>帶你深入了解DB2數據庫優化的六個准則
 
實戰推廣經驗 帶你了解友情鏈接各宗要害
  對于網絡推廣這塊來說,不論哪個形式的推廣都必須要掌握到其中利弊,凡事都有兩面性。一個網站在于它勤,特別是對于看重權重的人來說,網站做友情鏈接時掌握度,可是至關重要的。不僅僅在于兩個網站之間利用資源...查看完整版>>實戰推廣經驗 帶你了解友情鏈接各宗要害
 
全能美膚 帶你了解最IN光療美容儀(組圖) 美容_美麗顧問
全能美膚 帶你了解最IN光療美容儀(組圖) 美容_美麗顧問
  導讀:“光療”( Light Therapy),包括了紫外線、紅外線、可見光、激光等物理治療。  激光:能量密度高、方向性最佳、光度純、發散角小,常用于整容外科手術、深度祛斑,現在唯一進入到家用領域的激光儀器,是...查看完整版>>全能美膚 帶你了解最IN光療美容儀(組圖) 美容_美麗顧問
 
解讀SAN與NAS定義 了解二者的區別
  SAN與NAS看上去很相近,並且都是與網絡有關的詞。那麽SAN和NAS究竟有什麽區別了?我們先從它們的定義上來看下吧。  SAN——SAN是一個專有的、集中管理的信息基礎結構,它支持服務器和存儲之間任意的點到點的連...查看完整版>>解讀SAN與NAS定義 了解二者的區別