SQL自定義函式

2021-08-06 06:02:05 字數 2390 閱讀 7781

自定義函式與儲存過程的區別(存在的意義):

1.     能夠在select等sql語句中直接使用自定義函式,儲存過程不行。

2.     自定義函式可以呼叫其他函式,也可以呼叫自己(遞迴)

3.     可以在表列和check 約束中使用自定義函式來實現特殊列或約束

4.       

自定義函式不能有任何***。函式***是指對具有函式外作用域(例如資料庫表的修改)的資源狀態的任何永久性更改。函式中的語句唯一能做的更改是對函式上的區域性物件(如區域性游標或區域性變數)的更改。不能在函式中執行的操作包括:對資料庫表的修改,對不在函式上的區域性游標進行操作,傳送電子郵件,嘗試修改 目錄,以及生成返回至使用者的結果集。儲存過程沒有此限制

5.       

函式只能返回乙個變數。而儲存過程可以返回多個

使用者自定義函式的型別:

標量函式:返回乙個標量值

**值函式:返回行集(即返回多個值)

1、標量函式

create function 函式名(引數)

returns 返回值資料型別

[with ]

[as]

begin

sql語句(必須有return 變數或值)

end

2、**值函式

a、內聯**值函式

格式:create function 函式名(引數)

returns table

[with ] as

return(一條sql語句)

create function tabcmess(@code varchar(10))

returns table as

return(select ccode,scode from cmessage where ccode like @ccode)

b、多句**值函式

create function 函式名(引數)

returns **變數名table (**變數定義)

[with ] as

begin

sql語句

end

多句**值函式包含多條sql語句,至少有一條在**變數中填上資料值

**變數格式

returns @變數名 table (column 定義| 約束定義 [,…])

對**變數中的行可執行select,insert,update,delete , 但select into 和 insert 語句的結果集是從儲存過程插入。

create function tabcmessalot (@code varchar(10))

returns @ctable table(code varchar(10) null,cname varchar(100) null) as

begin

insert @ctable

select ccode,explain from cmessage

where scode like @code

return

end

適用範圍

1.      只查詢,不修改資料庫的狀態(修改、刪除表中記錄等)

2.      結果集需要通過遞迴等方法得到時,可以使用函式,函式比較靈活

3.      結果集需要直接被引用時,可以使用函式。需要對結果集進行再加工(指放在select語句中等),可以使用函式,函式可以嵌在select

等sql語句中。

注意事項:

使用者自定義函式不能用於執行一系列改變資料庫狀態的操作

在編寫自定義函式時需要注意的:

對於標量函式:

1.      所有的入參前都必須加@ 2.

create後的返回,單詞是returns,而不是return 3.

returns後面的跟的不是變數,而是返回值的型別,如:int,char等。

4.      在begin/end語句塊中,是return。

內嵌錶值函式:

1.      只能返回table,所以returns後面一定是table 2.

as後沒有begin/end,只有乙個return語句來返回特定的記錄。

多語句錶值函式:

1.returns後面直接定義返回的表型別,首先是定義表名,表明前面要加@,然後是關鍵字table,最後是表的結構。

2.      在begin/end語句塊中,直接將需要返回的結果insert到returns定義的表中就可以了,在最後return時,會將結果返回。

3.      最後只需要return,return後面不跟任何變數。

SQL自定義函式

建立使用者自定義函式 標量函式 create function dbo.bmrs bmh as int returns int asbegin declare bmrs int select bmrs count 工號 from 銷售人員where 部門號 bmh return bmrs endgo...

sql 自定義函式

delimiter create definer function woshow try aid bigint returns bigint 20 language sql not deterministic sql security comment string begin if aid 0 th...

SQL 自定義函式

函式型別有 標量型函式 返回乙個確定型別的值 內聯錶值型函式 以表的形式返回值,相當於引數化的檢視 多宣告錶值函式 標量函式和內聯錶值函式結合體,返回值是乙個表,和標量型函式一樣可以用begin.end 建立自定義函式 標量型函式 use database gocreate function fun...