版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第11章 用戶(hù)自定義函數(shù)設(shè)計(jì) 11.1 用戶(hù)自定義函數(shù)概述 11.2 創(chuàng)建用戶(hù)定義函數(shù) 11.3 用戶(hù)定義函數(shù)的調(diào)用 11.4 修改和刪除用戶(hù)定義函數(shù)11.5 用戶(hù)定義函數(shù)實(shí)例分析 10/11/20221第11章 用戶(hù)自定義函數(shù)設(shè)計(jì) 11.1 用戶(hù)自定義函數(shù)概述11.1 用戶(hù)自定義函數(shù)概述 11.1.1用戶(hù)自定義函數(shù)的特點(diǎn)1、重復(fù)使用編程代碼,減少編程開(kāi)發(fā)時(shí)間,提高工作效率。2、隱藏SQL細(xì)節(jié),把SQL繁瑣的工作留給數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,而程序開(kāi)發(fā)員則集中處理高級(jí)編程語(yǔ)言。3、維修集中化,可以在一個(gè)地方做業(yè)務(wù)上的邏輯修改,然后讓這些修改自動(dòng)應(yīng)用到所有相關(guān)程序中。4、可在另一個(gè)SQL語(yǔ)句中直接調(diào)用。5
2、、函數(shù)必須始終返回一個(gè)值(一個(gè)標(biāo)量值或一個(gè)表格)10/11/2022211.1 用戶(hù)自定義函數(shù)概述 11.1.1用戶(hù)自定義函數(shù)的11.1 用戶(hù)自定義函數(shù)概述 除了使用系統(tǒng)提供的函數(shù)外,用戶(hù)還可以根據(jù)需要自定義函數(shù)。用戶(hù)自定義函數(shù)(User Defined Functions)是SQL Server 2000以后新增的數(shù)據(jù)庫(kù)對(duì)象,是SQL Server的一大改進(jìn)。 用戶(hù)自定義函數(shù)不能用于執(zhí)行一系列改變數(shù)據(jù)庫(kù)狀態(tài)的操作,但它可以像系統(tǒng)函數(shù)一樣在查詢(xún)或存儲(chǔ)過(guò)程等的程序段中使用,也可以像存儲(chǔ)過(guò)程一樣通過(guò)EXECUTE命令來(lái)執(zhí)行。用戶(hù)自定義函數(shù)中存儲(chǔ)了一個(gè)Transact-SQL例程,可以返回一定的值。
3、10/11/2022311.1 用戶(hù)自定義函數(shù)概述 除了使用系 可使用CREATE FUNCTION語(yǔ)句創(chuàng)建、使用ALTER FUNCTION語(yǔ)句修改、以及使用DROP FUNCTION語(yǔ)句除去用戶(hù)定義函數(shù)。每個(gè)完全合法的用戶(hù)定義函數(shù)名必須唯一。 必須被授予CREATE FUNCTION權(quán)限才能創(chuàng)建、修改或除去用戶(hù)定義函數(shù)。不是所有者的用戶(hù)在Transact-SQL語(yǔ)句中使用某個(gè)函數(shù)之前,必須先給此用戶(hù)授予該函數(shù)的適當(dāng)權(quán)限。若要?jiǎng)?chuàng)建或更改在CHECK約束、DEFAULT子句或計(jì)算列定義中引用用戶(hù)定義函數(shù)的表,還必須具有函數(shù)的REFERENCES權(quán)限。 10/11/20224 可使用CREATE
4、 FUNCTION語(yǔ)句創(chuàng)建、 在SQL Server 2000中根據(jù)函數(shù)返回值形式的不同將用戶(hù)自定義函數(shù)分為三種類(lèi)型:標(biāo)量型函數(shù)(Scalar functions)內(nèi)嵌表值型函數(shù)(Inline table-valued functions)多語(yǔ)句表值型函數(shù)(Multi-statement table-valued functions)。 10/11/20225 在SQL Server 2000中根據(jù)函數(shù)返回值 標(biāo)量型函數(shù)(Scalar functions) 標(biāo)量型函數(shù)返回在RETURNS子句中定義的類(lèi)型的單個(gè)數(shù)據(jù)值??梢允褂盟袠?biāo)量數(shù)據(jù)類(lèi)型,包括bigint和sql_variant。不支持ti
5、mestamp數(shù)據(jù)類(lèi)型、用戶(hù)定義數(shù)據(jù)類(lèi)型和非標(biāo)量類(lèi)型(如table或cursor)。在BEGIN.END塊中定義的函數(shù)主體包含返回該值的 Transact-SQL語(yǔ)句系列。返回類(lèi)型可以是除text、ntext、image、cursor、timestamp和table 之外的任何數(shù)據(jù)類(lèi)型。 10/11/20226 標(biāo)量型函數(shù)(Scalar functions) 10/ 內(nèi)嵌表值型函數(shù)(Inline table-valued functions) 內(nèi)嵌表值型函數(shù)以表的形式返回一個(gè)返回值,即它返回的是一個(gè)表。內(nèi)嵌表值型函數(shù)沒(méi)有由BEGIN-END語(yǔ)句括起來(lái)的函數(shù)體。其返回的表由一個(gè)位于RETURN子
6、句中的SELECT命令段從數(shù)據(jù)庫(kù)中篩選出來(lái)。內(nèi)聯(lián)表值型函數(shù)功能相當(dāng)于一個(gè)參數(shù)化的視圖。 10/11/20227 內(nèi)嵌表值型函數(shù)(Inline table-valued多語(yǔ)句表值型函數(shù)(Multi-statement table-valued functions) 多語(yǔ)句表值型函數(shù)可以看作標(biāo)量型和內(nèi)嵌表值型函數(shù)的結(jié)合體。它的返回值是一個(gè)表,但它和標(biāo)量型函數(shù)一樣有一個(gè)用BEGIN-END語(yǔ)句括起來(lái)的函數(shù)體,返回值的表中的數(shù)據(jù)是由函數(shù)體中的語(yǔ)句插入的。由此可見(jiàn),它可以進(jìn)行多次查詢(xún),對(duì)數(shù)據(jù)進(jìn)行多次篩選與合并,彌補(bǔ)了內(nèi)嵌表值型函數(shù)的不足。用戶(hù)定義函數(shù)采用零個(gè)或更多的輸入?yún)?shù)并返回標(biāo)量值或表。函數(shù)最多可以
7、有1024個(gè)輸入?yún)?shù)。當(dāng)函數(shù)的參數(shù)有默認(rèn)值時(shí),調(diào)用該函數(shù)時(shí)必須指定默認(rèn)DEFAULT關(guān)鍵字才能獲取默認(rèn)值。該行為不同于在存儲(chǔ)過(guò)程中含有默認(rèn)值的參數(shù),而在這些存儲(chǔ)過(guò)程中省略該函數(shù)也意味著省略默認(rèn)值。用戶(hù)定義函數(shù)不支持輸出參數(shù)。 10/11/20228多語(yǔ)句表值型函數(shù)(Multi-statement tabl函數(shù)中的有效語(yǔ)句類(lèi)型包括:(1)DECLARE語(yǔ)句,該語(yǔ)句可用于定義函數(shù)局部的數(shù)據(jù)變量和游標(biāo)。(2)為函數(shù)局部對(duì)象賦值,如使用SET給標(biāo)量和表局部變量賦值。(3)游標(biāo)操作,該操作引用在函數(shù)中聲明、打開(kāi)、關(guān)閉和釋放的局部游標(biāo)。不允許使用FETCH語(yǔ)句將數(shù)據(jù)返回到客戶(hù)端。僅允許使用FETCH語(yǔ)句通
8、過(guò)INTO子句給局部變量賦值。(4)控制流語(yǔ)句。(5)SELECT語(yǔ)句,該語(yǔ)句包含帶有表達(dá)式的選擇列表,其中的表達(dá)式將值賦予函數(shù)的局部變量。(6)INSERT、UPDATE和DELETE語(yǔ)句,這些語(yǔ)句修改函數(shù)的局部table變量。(7)EXECUTE語(yǔ)句,該語(yǔ)句調(diào)用擴(kuò)展存儲(chǔ)過(guò)程。 10/11/20229函數(shù)中的有效語(yǔ)句類(lèi)型包括:10/10/2022911.2 創(chuàng)建用戶(hù)定義函數(shù) 創(chuàng)建標(biāo)量型用戶(hù)自定義函數(shù)(Scalar functions): CREATE FUNCTION owner_name. function_name ( parameter_name AS scalar_parameter
9、_data_type = default ,.n ) RETURNS scalar_return_data_type WITH , .n AS BEGIN function_body RETURN scalar_expression END 10/11/20221011.2 創(chuàng)建用戶(hù)定義函數(shù) 創(chuàng)建標(biāo)量型用戶(hù)自定義函數(shù)(Sc 創(chuàng)建內(nèi)嵌表值型函數(shù)(Inline table-valued functions): CREATE FUNCTION owner_name. function_name(parameter_name AS scalar_parameter_data_type = defaul
10、t ,.n ) RETURNS TABLE WITH , .n AS RETURN ( ) select-stmt 10/11/202211 創(chuàng)建內(nèi)嵌表值型函數(shù)10/10/202211創(chuàng)建多語(yǔ)句表值型函數(shù)(Multi-statement table-valued functions): CREATE FUNCTION owner_name. function_name( parameter_name AS scalar_parameter_data_type = default ,.n ) RETURNS return_variable TABLE WITH , .n AS BEGIN fun
11、ction_body RETURN END := ENCRYPTION | SCHEMABINDING := ( column_definition | table_constraint ,.n ) 10/11/202212創(chuàng)建多語(yǔ)句表值型函數(shù)10/10/202212 參數(shù)說(shuō)明: owner_name:擁有該用戶(hù)定義函數(shù)的用戶(hù)ID的名稱(chēng)。 function_name:用戶(hù)定義函數(shù)的名稱(chēng)。函數(shù)名稱(chēng)必須符合標(biāo)識(shí)符的規(guī)則,對(duì)其所有者來(lái)說(shuō),該名稱(chēng)在數(shù)據(jù)庫(kù)中必須是唯一的。10/11/202213 參數(shù)說(shuō)明: owner_name:擁有該用戶(hù) 參數(shù)說(shuō)明: parameter_name:用戶(hù)定義函數(shù)的參數(shù)。
12、 CREATE FUNCTION語(yǔ)句中可以聲明一個(gè)或多個(gè)參數(shù)。函數(shù)最多可以有1 024個(gè)參數(shù)。函數(shù)執(zhí)行時(shí)每個(gè)已聲明參數(shù)的值必須由用戶(hù)指定,除非該參數(shù)的默認(rèn)值已經(jīng)定義。如果函數(shù)的參數(shù)有默認(rèn)值,在調(diào)用該函數(shù)時(shí)必須指定“default”關(guān)鍵字才能獲得默認(rèn)值。這種行為不同于存儲(chǔ)過(guò)程中有默認(rèn)值的參數(shù),在存儲(chǔ)過(guò)程中省略參數(shù)也意味著使用默認(rèn)值。使用符號(hào)作為第一個(gè)字符來(lái)指定參數(shù)名稱(chēng)。參數(shù)名稱(chēng)必須符合標(biāo)識(shí)符的規(guī)則。每個(gè)函數(shù)的參數(shù)僅用于該函數(shù)本身;相同的參數(shù)名稱(chēng)可以用在其它函數(shù)中。參數(shù)只能代替常量;而不能用于代替表名、列名或其它數(shù)據(jù)庫(kù)對(duì)象的名稱(chēng)。 10/11/202214 參數(shù)說(shuō)明: parameter_name
13、:用戶(hù)scalar_parameter_data_type:參數(shù)的數(shù)據(jù)類(lèi)型。所有標(biāo)量數(shù)據(jù)類(lèi)型(包括bigint和sql_variant)都可用作用戶(hù)定義函數(shù)的參數(shù)。不支持timestamp數(shù)據(jù)類(lèi)型和用戶(hù)定義數(shù)據(jù)類(lèi)型。不能指定非標(biāo)量類(lèi)型(例如cursor和table)。scalar_return_data_type :是標(biāo)量用戶(hù)定義函數(shù)的返回值。scalar_return_data_type 可以是 SQL Server 支持的任何標(biāo)量數(shù)據(jù)類(lèi)型(text、ntext、image和timestamp除外)。scalar_expression:指定標(biāo)量型函數(shù)返回的標(biāo)量值。TABLE:指定表值型函數(shù)的
14、返回值為表。在內(nèi)嵌表值型函數(shù)中,通過(guò)單個(gè)SELECT語(yǔ)句定義TABLE返回值。內(nèi)嵌函數(shù)沒(méi)有相關(guān)聯(lián)的返回變量。在多語(yǔ)句表值型函數(shù)中,return_variable 是TABLE變量,用于存儲(chǔ)和累積應(yīng)作為函數(shù)值返回的行。 參數(shù)說(shuō)明:10/11/202215scalar_parameter_data_type:參數(shù)的 function_body:指定一系列Transact-SQL語(yǔ)句定義函數(shù)的值, 這些語(yǔ)句合在一起不會(huì)產(chǎn)生副作用。function_body只用于標(biāo)量型函數(shù)和多語(yǔ)句表值型函數(shù)。在標(biāo)量型函數(shù)中,function_body是一系列合起來(lái)求得標(biāo)量值的Transact-SQL語(yǔ)句。在多語(yǔ)句表值
15、型函數(shù)中,function_body是一系列填充表返回變量的Transact-SQL語(yǔ)句。 select-stmt:是定義內(nèi)嵌表值型函數(shù)返回值的單個(gè)SELECT語(yǔ)句。 ENCRYPTION指出SQL Server加密包含CREATE FUNCTION語(yǔ)句文本的系統(tǒng)表列。使用ENCRYPTION可以避免將函數(shù)作為SQL Server復(fù)制的一部分發(fā)布。 SCHEMBINDING:指定將函數(shù)綁定到它所引用的數(shù)據(jù)庫(kù)對(duì)象。如果函數(shù)是用SCHEMABINDING選項(xiàng)創(chuàng)建的,則不能更改(使用ALTER語(yǔ)句)或除去(使用DROP語(yǔ)句)該函數(shù)引用的數(shù)據(jù)庫(kù)對(duì)象。 參數(shù)說(shuō)明:10/11/202216 functio
16、n_body:指定一系列Tran11.2 創(chuàng)建用戶(hù)定義函數(shù) 11.2.1 使用對(duì)象資源管理器 10/11/20221711.2 創(chuàng)建用戶(hù)定義函數(shù) 11.2.1 使用對(duì)象資源管理11.2 創(chuàng)建用戶(hù)定義函數(shù)11.2.1 使用CREATE FUNCTION命令創(chuàng)建用戶(hù)自定義函數(shù) 1、創(chuàng)建標(biāo)量值用戶(hù)自定義函數(shù)(Scalar functions) 創(chuàng)建成績(jī)轉(zhuǎn)換標(biāo)量值函數(shù),實(shí)現(xiàn)百分制成績(jī)與優(yōu)、良、中、及格、不及格五個(gè)等級(jí)的換算。USE 教學(xué)管理GOCREATE FUNCTION F_成績(jī)分級(jí)(成績(jī) FLOAT)RETURNS CHAR(16) AS 10/11/20221811.2 創(chuàng)建用戶(hù)定義函數(shù)11.
17、2.1 使用CREATE11.2 創(chuàng)建用戶(hù)定義函數(shù)BEGIN DECLARE 等級(jí) CHAR(16) SELECT 等級(jí) = CASE WHEN 成績(jī) IS NULL THEN 還沒(méi)參加考試 WHEN 成績(jī) = 60 and 成績(jī) = 70 and 成績(jī) = 80 and 成績(jī) 90 THEN 良好 ELSE 優(yōu)秀! END RETURN(等級(jí))END 10/11/20221911.2 創(chuàng)建用戶(hù)定義函數(shù)BEGIN10/10/2022111.2 創(chuàng)建用戶(hù)定義函數(shù) 創(chuàng)建內(nèi)聯(lián)表值型函數(shù),返回指定學(xué)院學(xué)生的信息 USE 教學(xué)管理GOCREATE FUNCTION F_學(xué)生信息(院系 CHAR(20)
18、RETURNS TABLEASRETURN(SELECT 學(xué)號(hào), 姓名, 性別, 院系, 專(zhuān)業(yè), 籍貫FROM 學(xué)生表 WHERE 所在院系=院系 ) 10/11/20222011.2 創(chuàng)建用戶(hù)定義函數(shù) 創(chuàng)建內(nèi)聯(lián)表值型函數(shù),返回11.2 創(chuàng)建用戶(hù)定義函數(shù) 創(chuàng)建多語(yǔ)句表值型函數(shù),返回指定教師某學(xué)年的開(kāi)課信息USE 教學(xué)管理GOCREATE FUNCTION F_教師課表(教師姓名 CHAR(8),開(kāi)課學(xué)年 char(9)RETURNS 教師課表 TABLE(課名 varchar(30),開(kāi)課地點(diǎn) char(6),開(kāi)課學(xué)年 char(9),開(kāi)課學(xué)期 int,開(kāi)課周數(shù) int,開(kāi)課時(shí)間 varcha
19、r(20),已選人數(shù) int) 10/11/20222111.2 創(chuàng)建用戶(hù)定義函數(shù) 創(chuàng)建多語(yǔ)句表值型函數(shù),返A(chǔ)SBEGIN INSERT 教師課表 SELECT 課名,開(kāi)課地點(diǎn),開(kāi)課學(xué)年,開(kāi)課學(xué)期,開(kāi)課周數(shù), 開(kāi)課時(shí)間,已選人數(shù) FROM 教師表 T,開(kāi)課表 O,課程表 C WHERE T.工號(hào)=O.工號(hào) AND O.課號(hào)=C.課號(hào) AND 姓名=教師姓名 AND 開(kāi)課學(xué)年=開(kāi)課學(xué)年 RETURN END 10/11/202222AS10/10/20222211.3 用戶(hù)定義函數(shù)的調(diào)用 當(dāng)引用或喚醒調(diào)用用戶(hù)定義函數(shù)時(shí),應(yīng)指定函數(shù)名。而在括號(hào)內(nèi)可指定稱(chēng)為參數(shù)的表達(dá)式,以提供將傳遞給參數(shù)的數(shù)據(jù)。當(dāng)
20、喚醒調(diào)用函數(shù)時(shí)不能在參數(shù)中指定參數(shù)名。當(dāng)喚醒調(diào)用函數(shù)時(shí),必須提供所有參數(shù)的參數(shù)值,并且必須以CREATE FUNCTION語(yǔ)句定義參數(shù)的相同序列指定參數(shù)值。例如,如果使用整型參數(shù)和nchar(20)參數(shù)定義名為fn_MyIntFunc的函數(shù)以返回整數(shù),可利用以下方法喚醒調(diào)用該函數(shù): 10/11/20222311.3 用戶(hù)定義函數(shù)的調(diào)用 當(dāng)引用或喚醒調(diào)用用戶(hù)定義11.3 用戶(hù)定義函數(shù)的調(diào)用 調(diào)用創(chuàng)建的函數(shù),按五等成績(jī)顯示信電學(xué)院每個(gè)學(xué)生所選課程的成績(jī)SELECT E.學(xué)號(hào),姓名,O.開(kāi)課號(hào),O.課號(hào),課 名,DBO.F_成績(jī)分級(jí)(成績(jī)) AS 成績(jī)等級(jí)FROM 選課表 E, 學(xué)生表 S,開(kāi)課表
21、O, 課程表 C WHERE S.學(xué)號(hào) =E.學(xué)號(hào) AND E.開(kāi)課號(hào)= O.開(kāi)課號(hào) AND C.課號(hào)= O.課號(hào) 10/11/20222411.3 用戶(hù)定義函數(shù)的調(diào)用 調(diào)用創(chuàng)建的函數(shù),按五等成績(jī)11.3 用戶(hù)定義函數(shù)的調(diào)用 調(diào)用創(chuàng)建的函數(shù)F_學(xué)生信息,返回指定學(xué)院的學(xué)生的基本信息-下面調(diào)用該函數(shù)DECLARE 院系 CHAR(20)SET 院系=信電學(xué)院 SELECT * FROM F_學(xué)生信息(院系) 10/11/20222511.3 用戶(hù)定義函數(shù)的調(diào)用 調(diào)用創(chuàng)建的函數(shù)F_學(xué)生11.3 用戶(hù)定義函數(shù)的調(diào)用 調(diào)用創(chuàng)建的函數(shù)F_教師課表,能返回指定老師某學(xué)年所上的課程信息。-下面調(diào)用該函數(shù)DE
22、CLARE 姓名 CHAR(10)SET 姓名=黃中天 SELECT * FROM F_教師課表(姓名,2007-2008) 10/11/20222611.3 用戶(hù)定義函數(shù)的調(diào)用 調(diào)用創(chuàng)建的函數(shù)函數(shù)的好處: 由上面例子可以看出,用戶(hù)自定義函數(shù)可以用來(lái)提供參數(shù)化的用戶(hù)視圖,比直接定義用戶(hù)視圖具有更大的靈活性。10/11/202227函數(shù)的好處:10/10/20222711.4 修改和刪除用戶(hù)定義函數(shù) 11.4.1 修改用戶(hù)定義函數(shù) 11.4.2 刪除用戶(hù)定義函數(shù) 10/11/20222811.4 修改和刪除用戶(hù)定義函數(shù) 11.4.1 修改11.4.1 修改用戶(hù)定義函數(shù) 用ALTER FUNCTI
23、ON命令可以修改先前由CREATE FUNCTION語(yǔ)句創(chuàng)建的現(xiàn)有用戶(hù)定義函數(shù),但不會(huì)更改權(quán)限,也不影響相關(guān)的函數(shù)、存儲(chǔ)過(guò)程或觸發(fā)器。 10/11/20222911.4.1 修改用戶(hù)定義函數(shù) 用ALTER修改標(biāo)量型用戶(hù)自定義函數(shù):ALTER FUNCTION owner_name. function_name ( parameter_name AS scalar_parameter_data_type = default ,.n ) RETURNS scalar_return_data_type WITH , .n AS BEGIN function_body RETURN scalar_ex
24、pression END10/11/202230修改標(biāo)量型用戶(hù)自定義函數(shù):10/10/202230修改內(nèi)嵌表值型函數(shù): CREATE FUNCTION owner_name. function_name ( parameter_name AS scalar_parameter_data_type = default ,.n ) RETURNS TABLE WITH , .n AS RETURN ( select-stmt ) 10/11/202231修改內(nèi)嵌表值型函數(shù):10/10/202231創(chuàng)建多語(yǔ)句表值型函數(shù):CREATE FUNCTION owner_name. function_nam
25、e ( parameter_name AS scalar_parameter_data_type = default ,.n ) RETURNS return_variable TABLE WITH , .n AS BEGIN function_body RETURN END := ENCRYPTION | SCHEMABINDING := ( column_definition | table_constraint ,.n )10/11/202232創(chuàng)建多語(yǔ)句表值型函數(shù):10/10/202232 修改命令的語(yǔ)法與CREATE FUNCTION相同,各參數(shù)含義見(jiàn)創(chuàng)建用戶(hù)自定義函數(shù)一節(jié)。使用AL
26、TER FUNCTION命令其實(shí)相當(dāng)于重建了一個(gè)同名的函數(shù)。 注釋 不能用ALTER FUNCTION將標(biāo)量值函數(shù)更改為表值型函數(shù),反之亦然。同樣地,也不能用ALTER FUNCTION將行內(nèi)函數(shù)更改為多語(yǔ)句函數(shù),反之亦然。 權(quán)限 ALTER FUNCTION權(quán)限默認(rèn)授予sysadmin固定服務(wù)器角色成員、db_owner和db_ddladmin固定數(shù)據(jù)庫(kù)角色成員和函數(shù)的所有者且不可轉(zhuǎn)讓。 函數(shù)的所有者對(duì)其函數(shù)具有EXECUTE權(quán)限。不過(guò),也可將此權(quán)限授予其他用戶(hù)。 10/11/202233 修改命令的語(yǔ)法與CREATE FUNCTION相 創(chuàng)建一個(gè)內(nèi)聯(lián)表值型函數(shù),返回指定學(xué)生所選的課程號(hào)、課
27、程名、成績(jī),然后修改。 USE 教學(xué)管理GOCREATE FUNCTION F_學(xué)生選課信息(學(xué)號(hào) CHAR(7)RETURNS TABLEASRETURN(SELECT O.課號(hào),課名,成績(jī)FROM 選課表 E,開(kāi)課表 O,課程表 CWHERE E.開(kāi)課號(hào)=O.開(kāi)課號(hào)AND O.課號(hào)=C.課號(hào) AND 學(xué)號(hào)=學(xué)號(hào)) 10/11/202234 創(chuàng)建一個(gè)內(nèi)聯(lián)表值型函數(shù),返回指定學(xué)生所選的課程號(hào)、課程ALTER function F_學(xué)生選課信息(學(xué)號(hào) CHAR(7)RETURNS TABLEASRETURN(SELECT O.課號(hào),課名, 成績(jī) =CASE WHEN 成績(jī) IS NULL THE
28、N 未完成考試 ELSE CAST(成績(jī) AS CHAR(12) ENDFROM 選課表 E,開(kāi)課表 O,課程表 CWHERE E.開(kāi)課號(hào)=O.開(kāi)課號(hào)AND O.課號(hào)=C.課號(hào) AND 學(xué)號(hào)=學(xué)號(hào))修改該函數(shù),使得函數(shù)返回指定學(xué)生所選的課程號(hào)、課程名、成績(jī),如果成績(jī)?yōu)镹ULL值,就顯示未完成考試。10/11/202235ALTER function F_學(xué)生選課信息(學(xué)號(hào) CH11.4.2 刪除用戶(hù)定義函數(shù) 使用DROP FUNCTION從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)或多個(gè)用戶(hù)定義的函數(shù)。用戶(hù)定義的函數(shù)通過(guò)CREATE FUNCTION創(chuàng)建,通過(guò)ALTER FUNCTION修改。 語(yǔ)法格式為: DRO
29、P FUNCTION owner_name . function_name ,.n 例: DROP FUNCTION F_學(xué)生選課信息10/11/20223611.4.2 刪除用戶(hù)定義函數(shù) 使用DROP F11.5 用戶(hù)定義函數(shù)實(shí)例分析 問(wèn)題提出:顯示指定學(xué)院每個(gè)學(xué)生選修課程情況和獲取學(xué)分情況,要求先顯示每個(gè)學(xué)生所選的課程,如果該門(mén)課程已經(jīng)通過(guò)考試,則顯示該門(mén)課程的學(xué)分,如果沒(méi)有通過(guò)考試或還沒(méi)有參加考試,則為0,然后顯示該學(xué)生獲取學(xué)分的總數(shù)。 問(wèn)題分析:完成上述顯示功能,不能由一個(gè)簡(jiǎn)單的查詢(xún)語(yǔ)句完成,也不能用視圖來(lái)進(jìn)行定義,而須進(jìn)行復(fù)雜的數(shù)據(jù)處理。我們考慮用多語(yǔ)句表值型函數(shù)來(lái)實(shí)現(xiàn),將數(shù)據(jù)進(jìn)行分布處理,然后按要求放到返回表中。 10/11/20223711.5 用戶(hù)定義函數(shù)實(shí)例分析 問(wèn)題提出:顯示CREATE FUNCTION F_學(xué)生獲取學(xué)分 (院系 CHAR(20)RETURNS 成績(jī)學(xué)分表 TABLE (學(xué)號(hào) CHAR(7), 姓名 CHAR(10), 課名 CHAR(20), 成績(jī) CHAR(12), 學(xué)分 INT)AS10/11/202238CREATE FUNCTION F_學(xué)生獲取學(xué)分10/10/ BEGIN DECLARE 學(xué)號(hào) CHAR(7),姓名 CHAR(10),學(xué)分 INT -定義游標(biāo) DECLARE CUR_學(xué)生學(xué)分 CURSOR FOR
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度私人二手房購(gòu)房定金及房產(chǎn)稅費(fèi)承擔(dān)合同3篇
- 二零二五年度夫妻情感調(diào)解-臨時(shí)分居協(xié)議3篇
- 2024年環(huán)境保護(hù)聯(lián)防協(xié)議書(shū)
- 二零二五年度地質(zhì)勘探設(shè)備租賃合同樣本2篇
- 2025年度知識(shí)產(chǎn)權(quán)貫標(biāo)示范企業(yè)創(chuàng)建合同3篇
- 二零二五年度農(nóng)業(yè)項(xiàng)目投資合作協(xié)議3篇
- 智能教育領(lǐng)域教育信息化合作協(xié)議
- 二零二五年度建筑工程施工人工費(fèi)環(huán)保措施實(shí)施合同3篇
- 藝術(shù)品交易服務(wù)合同
- 2024年短期公寓租賃協(xié)議
- 2023-2024學(xué)年滬科版九年級(jí)上學(xué)期物理期末模擬試卷(含答案)
- 測(cè)繪生產(chǎn)成本費(fèi)用定額2022
- 卷?yè)P(yáng)機(jī)專(zhuān)項(xiàng)施工方案
- 對(duì)外投資合作國(guó)別(地區(qū))指南 -泰國(guó)
- 2023年-2024年崗位安全教育培訓(xùn)試題及答案通用
- 口腔修復(fù)學(xué)(全套課件290p)課件
- 小學(xué)生心理問(wèn)題的表現(xiàn)及應(yīng)對(duì)措施【全國(guó)一等獎(jiǎng)】
- 小學(xué)生科普人工智能
- 初中學(xué)段勞動(dòng)任務(wù)清單(七到九年級(jí))
- 退耕還林監(jiān)理規(guī)劃
- GB/T 1335.2-2008服裝號(hào)型女子
評(píng)論
0/150
提交評(píng)論