儲存過程和自定義函式的區別
在哪裡呢?下面是小編給大家整理的,供大家參閱!
1儲存過程,功能強大,可以執行包括修改表等一系列資料庫操作,也可以建立為 SQL Server 啟動時自動執行的儲存過程。
自定義函式,使用者定義函式不能用於執行一組修改全域性資料庫狀態的操作。
2儲存過程,可以使用非確定函式。
自定義函式,不允許在使用者定義函式主體中內建非確定函式。
3儲存過程,主要是返回一個int狀態結果,也可返回記錄集。
自定義函式,可以返回表變數。
關於這個,很容易糊塗。儲存過程,可以使用這樣的形式來返回N多的結果:
create procedure sp1
as
begin
select name, fid_fk from table_1
print '111'
select testname ,fid from table_2
end
create procedure sp1 as begin select name, fid_fk from table_1 print '111' select testname ,fid from table_2 end
[表1]
而這個結果,只能以兩種形式被使用:insert into table_3name, fid_fk exec sp1; 或者 EXEC sp1.
不過,對於自定義函式,它必須指定定義為返回值為table型別的資料@t,並且在程式碼中顯式的向該table @t中insert;或者,只是制定返回值為table型別,不指定return 的物件變數,直接return 該表。即:
create function fn1
returns table
as
return select fid, testname from table_2
create function fn1 returns table as return select fid, testname from table_2
[表2]
或者
create function fn1
returns @v table
fid int primary key not null,
testname nchar10
as
begin
insert into @v select fid,testname from table_2
end
create function fn1 returns @v table fid int primary key not null, testname nchar10 as begin insert into @v select fid,testname from table_2 end
[表3]
在這個方面,最能夠看出:前者是一系列功能的集合,可以返回int值,或者返回查詢的結果集合,但是隻是作為一系列功能的副產品;而後者,就是為了返回值而建立的。在【附錄】中詳細說明自定義函式的使用。
4儲存過程,其返回值不能被直接引用;而是必須被使用為exec sp1或者 insert into table 的形式使用。
自定義函式,其返回值可以被直接引用。
5儲存過程,用 EXECUTE 語句執行。
自定義函式,在查詢語句中呼叫。
【附錄】最後補充一下。
我ft,破csdn,整個格式都不會,不知道幹嘛的。不過還是言歸正傳。
一般說來,自定義函式就有這三個用處:
1,如上[表2],返回一個in-line table value;
2,如上[表3],返回一個multi statement table value;
3,僅僅返回一個任意的變數,比如:
Create Function CubicVolume
@CubeLength decimal4,1,@CubeWidth decimal4,1,@CubeHeight decimal4,1
Returns decimal12,3
As
Begin
Return @CubeLength * @CubeWidth * @CubeHeight
End
2.
SQL中的儲存過程,函式,檢視有什麼區別?
儲存過程是預先寫好並編譯好的SQL程式
函式預先寫好的程式碼片斷,有系統函式,也有自定義函式
檢視是預先建立的查詢語句,用起來就像使用表一樣了
儲存過程需要單獨執行,函式可以隨處呼叫,檢視是一種直觀的表現方式~
儲存過程優點和缺點
儲存過程Stored Procedure是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數如果該儲存過程帶有引數來執行它。儲存過程是資料庫中的一個重要物件,任何一個設計良好的資料庫應用程式都應該用到儲存過程。
優點
①重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。
②提高效能。儲存過程在建立的時候在進行了編譯,將來使用的時候不再重新翻譯。一般的SQL語句每執行一次就需要編譯一次,所以使用儲存過程提高了效率。
③減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。
④安全性。引數化的儲存過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於儲存過程。
缺點
1:除錯麻煩,但是用 PL/SQL Developer 除錯很方便!彌補這個缺點。
2:移植問題,資料庫端程式碼當然是與資料庫相關的。但是如果是做工程型專案,基本不存在移植問題。
3:重新編譯問題,因為後端程式碼是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯不過也可以設定成執行時刻自動編譯。
4: 如果在一個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。
大腳骨怎麼辦