国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

用戶自定義函數

2024-07-21 02:12:54
字體:
來源:轉載
供稿:網友
   除了使用系統提供的函數外,用戶還可以根據需要自定義函數。用戶自定義函數(user defined functions)是sql server 2000 新增的數據庫對象,是sql server 的一大改進。
    用戶自定義函數不能用于執行一系列改變數據庫狀態的操作,但它可以像系統函數一樣在查詢或存儲過程等的程序段中使用,也可以像存儲過程一樣通過execute 命令來執行。用戶自定義函數中存儲了一個transact-sql 例程,可以返回一定的值。
    在sql server 2000 中根據函數返回值形式的不同將用戶自定義函數分為三種類型:
  • 標量型函數(scalar functions)
    標量型函數返回一個確定類型的標量值其返回值類型為除text、 ntext、 image、cursor、 timestamp 和table 類型外的其它數據類型。函數體語句定義在begin-end語句內,其中包含了可以返回值的transact-sql 命令。
  • 內聯表值型函數(inline table-valued functions)
    內聯表值型函數以表的形式返回一個返回值,即它返回的是一個表內聯表值型函數沒有由begin-end 語句括起來的函數體。其返回的表由一個位于return 子句中的select 命令段從數據庫中篩選出來。內聯表值型函數功能相當于一個參數化的視圖。
  • 多聲明表值型函數(multi-statement table-valued functions)
    多聲明表值型函數可以看作標量型和內聯表值型函數的結合體。它的返回值是一個表,但它和標量型函數一樣有一個用begin-end 語句括起來的函數體,返回值的表中的數據是由函數體中的語句插入的。由此可見,它可以進行多次查詢,對數據進行多次篩選
    與合并,彌補了內聯表值型函數的不足。

13.13.1 創建用戶自定義函數
sql server 2000 為三種類型的用戶自定義函數提供了不同的命令創建格式。
(1) 創建標量型用戶自定義函數(scalar functions) 其語法如下:


各參數說明如下:

  • owner_name
    指定用戶自定義函數的所有者。
  • function_name
    指定用戶自定義函數的名稱。database_name.owner_name.function_name 應是惟一的。
  • @parameter_name
    定義一個或多個參數的名稱。一個函數最多可以定義1024 個參數每個參數前用“@”符號標明。參數的作用范圍是整個函數。參數只能替代常量,不能替代表名、列名或其它數據庫對象的名稱。用戶自定義函數不支持輸出參數。
  • scalar_parameter_data_type
    指定標量型參數的數據類型,可以為除text、 ntext、 image、 cursor、timestamp 和table 類型外的其它數據類型。
  • scalar_return_data_type
    指定標量型返回值的數據類型,可以為除text、 ntext、 image、 cursor、timestamp 和table 類型外的其它數據類型。
  • scalar_expression
    指定標量型用戶自定義函數返回的標量值表達式。
  • function_body
    指定一系列的transact-sql 語句,它們決定了函數的返回值。
  • encryption
    加密選項。讓sql server 對系統表中有關create function 的聲明加密,以防止用戶自定義函數作為sql server 復制的一部分被發布(publish) 。
  • schemabinding
    計劃綁定選項將用戶自定義函數綁定到它所引用的數據庫對象如果指定了此選項,則函數所涉及的數據庫對象從此將不能被刪除或修改,除非函數被刪除或去掉此選項。應注意的是,要綁定的數據庫對象必須與函數在同一數據庫中。

(2) 創建內聯表值型用戶自定義函數(inline table-valued functions)
其語法如下:


各參數說明如下:
  • table
    指定返回值為一個表。
  • select-stmt
    單個select 語句,確定返回的表的數據。
    其余參數與標量型用戶自定義函數相同。

(3) 創建多聲明表值型用戶自定義函數
其語法如下:

各參數說明如下:

  • @return_variable
    一個table 類型的變量,用于存儲和累積返回的表中的數據行。
  • 其余參數與標量型用戶自定義函數相同。
    在多聲明表值型用戶自定義函數的函數體中允許使用下列transact-sql 語句。
  • 賦值語句(assignment statements);
  • 流程控制語句(control-of-flow statements);
  • 定義作用范圍在函數內的變量和游標的declare 語句;
  • select 語句;
  • 編輯函數中定義的表變量的insert、 update 和delete 語句;
  • 在函數中允許涉及諸如聲明游標、打開游標、關閉游標、釋放游標這樣的游標操作,對于讀取游標而言,除非在fetch 語句中使用into 從句來對某一變量賦值,否則不允許在函數中使用fetch 語句來向客戶端返回數據。
????????????????    此外不確定性函數(non-deterministic functions) 不能在用戶自定義函數中使用。所謂不確定性函數是指那些使用相同的調用參數在不同時刻調用得到的返回值不同的函數。這些函數如表13-3 所示(全局變量也可以視為一種函數)。




(4) 用enterprise manager 創建用戶自定義函數
    用enterprise manager 創建用戶自定義函數的方法是:在enterprise manager 中選擇要創建用戶自定義函數的數據庫。在數據庫對象“user defined functions” 上單擊右鍵,從開始菜單中選擇“new user defined function” 選項,就會出現如圖13-4 所示的定義用戶自定義函數屬性對話框。可以在其中指定要定義的函數的名稱,并編輯函數的腳本。單擊“ok”按鈕,則添加用戶自定義函數對象到數據庫中。

圖13-4 定義用戶自定義函數屬性對話框

13.13.2 修改和刪除用戶自定義函數
    在enterprise manager 中選擇要進行改動的用戶自定義函數,單擊右鍵從快捷菜單中選擇“屬性”選項,則會出現與圖13-4 類似的修改用戶自定義函數結構對話框。可以修改用戶自定義函數的函數體、參數等。從快捷菜單中選擇“刪除”選項,則可刪除用戶自定義函數。
    用alter function 命令也可以修改用戶自定義函數。此命令的語法與createfunction 相同,因此使用alter function 命令其實相當于重建了一個同名的函數,用起來不大方便。
    另外,可以用drop function 命令刪除用戶自定義函數,其語法如下:
    drop function { [ owner_name. ] function_name } [ ,...n ]
例13-22: 刪除用戶自定義函數chiefinfo
drop function chiefinfo

本章小結
    本章主要介紹了sql server 中極為重要的兩個概念:游標和視圖,游標最為突出的貢獻在于其實現了對結果的行操作,從而可以在應用程序中對同一結果集施加不同的數據操作,在面向集合的數據庫管理系統和面向行的程序設計兩者之間架起了“溝通”的橋梁,實現了兩個數據處理方式的自由交流。視圖作為一個查詢結果集雖然仍與表具有相似的結構,但它是一張虛表,以視圖結構顯示在用戶面前的數據并不是以視圖的結構存儲在數據庫中,而是存儲在視圖所引用的基本表當中。視圖的存在為保障數據庫的安全性提供了新手段。除此之外,讀者從本章中也可以了解到sql server 2000 新增的“用戶自定義函數”的創建和使用。
上一篇:數據庫用戶

下一篇:索引視圖

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民和| 胶南市| 仲巴县| 二手房| 桃源县| 新巴尔虎右旗| 额敏县| 宝鸡市| 灌南县| 林芝县| 平顺县| 惠水县| 邹城市| 山阳县| 云龙县| 江川县| 玉山县| 红河县| 广州市| 隆德县| 龙陵县| 洪洞县| 浪卡子县| 新兴县| 武宁县| 波密县| 岫岩| 镇沅| 固阳县| 内乡县| 岑溪市| 桂平市| 汝南县| 嵊州市| 汕尾市| 锡林浩特市| 宿松县| 蛟河市| 定安县| 灵丘县| 锡林郭勒盟|