第 15 章 自訂函數與順序物件.

Slides:



Advertisements
Similar presentations
Oracle. 数据操纵语言  数据操纵语言用于检索、插入和修改数据  数据操纵语言是最常见的 SQL 命令  数据操纵语言命令包括:  SELECT  INSERT  UPDATE  DELETE.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
作業一 : USING DBMS ( 使用 DB2 及 SQL 基本練習 ) 報告人:學生楊群期 學號: 課程 : 高等資料庫 講師 : 楊維邦教授.
MySQL 基础技能与原理 —— 基础技能 MySQL DBA Team 彭立勋( )
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
第5章 T-SQL语言 5.1 SQL语言与T-SQL语言 5.2 常量、变量与数据类型 5.3 运算符与表达式 5.4 流程控制语句
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
OceanBase 0.4:从API到SQL 日照
第四章 数据库对象.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
資料庫 (Database) SQL Server 2008實作
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
第4讲 MySQL服务器的配置与应用.
Chap 13 視界與資料庫程式設計.
计算机应用基础 上海大学计算中心.
資料庫管理 資管二 賴柏融.
PL/SQL程序设计 过程, 函数 Trigger 对象关系数据库技术.
主机DB2数据库应用与编程 任课老师:王湖南 四川大学计算机(软件)学院.
JAVA 程式設計與資料結構 第十一章 JDBC.
DAT301: XML数据和关系性数据的最终结合处 – SQL Server 2005
第六章 學習SQL語言.
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
Chapter 12 T-SQL 語法與 ASP.NET.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
第 11 章 建立檢視表.
第 14 章 預存程序.
第 7 章 建立資料表與 資料庫圖表.
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
Transact-SQL 語言設計教學.
課程名稱:資料庫系統 授課老師:李春雄 博士
班級:博、碩子一甲 授課老師:鐘國家 助教:陳國政
SQL Server 2000 数据库入门.
实验 2:MS Access QBE Query使用
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。
SQL SERVER 一些经典语句 1.
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
医院职工公费医疗系统.
第四讲 数据库对象(视图、序列、同义词、索引)
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
Ch4.SQL Server 2005資料庫組成員元件介紹
数据库技术.
数据库应用技术 SQL Server 2005.
第20章 MySQL数据库.
学习目标 1、介绍Mysql Workbench 中插入数据
ORACLE 第九讲 触发器.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
数据透视表与SQL典型应用 ——数据分析人士必杀技
查询与视图 蔡海洋.
SQL查询语句 蔡海洋.
OceanBase 0.4:从API到SQL 日照
第三章 SQL Server数据管理.
第3章 JavaScript基本语句.
第9章 存储过程的创建和使用 9.1 存储过程简介 9.2 创建存储过程 9.3 修改存储过程 9.4 删除存储过程 9.5 执行存储过程.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
資料庫應用與實作 一到六章重點、習題.
第4章 数据查询.
数据库应用技术 天津电大 翟迎建.
Presentation transcript:

第 15 章 自訂函數與順序物件

本章重點 15-1 自訂函數的特色 15-2 自訂函數的建立、使用與修改 15-3 自訂函數的使用技巧 15-4 使用順序物件

15-1 自訂函數的特色 預存程序只能傳回一個整數值 預存程序可以經由參數來傳回資料 (將參數設為OUTPUT) 在預存程序中可以做任何的資料異動, 例如新增或修改資料、更改資料庫的設定…等 預存程序必須以 EXECUTE 來執行, 因此不能使用在運算式之中, 例如 myProc 會傳回 2, 那麼 『SET @var = myProc』或『SELECT * FROM myProc』都會造成錯誤。

自訂函數的特色 在預存程序中, 可以使用 TRY...CATCH 敘述來處理錯誤狀況。但在自訂函數中則禁止使用。

15-2 自訂函數的建立、使用與修改 純量值函數 (Scalar-valued function) 會傳回單一的資料值。 資料表值函數 (Table-valued function) 內嵌資料表值函數 (Inline table-valued function) 多重陳述式資料表值函數 (Multistatement table-valued function)

自訂函數的建立、使用與修改 純量值函數 內嵌資料表值函數 多重陳述式資料表值函數 如何建立、修改、或刪除自訂函數

純量值函數

純量值函數 CREATE FUNCTION function_name @param_name scalar_data_type [=default] [READONLY]

純量值函數 RETURNS scalar_return_data_type WITH <function_option> [[,] ...n] AS function_body RETURN scalar_expression

純量值函數

純量值函數

純量值函數

純量值函數

純量值函數

內嵌資料表值函數

內嵌資料表值函數 RETURNS TABLE RETURN [( ] select-statement [ )]

內嵌資料表值函數

內嵌資料表值函數

內嵌資料表值函數

多重陳述式資料表值函數

多重陳述式資料表值函數 RETURNS @return_variable TABLE <table_type_definition> RETURN

多重陳述式資料表值函數

多重陳述式資料表值函數

多重陳述式資料表值函數

如何建立、修改、或刪除自訂函數

如何建立、修改、或刪除自訂函數

如何建立、修改、或刪除自訂函數

15-3 自訂函數的使用技巧 執行自訂函數時的注意事項 在資料表的設定中使用函數 在自訂函數中使用敘述的限制 決定性與非決定性函數 設定 SCHEMABINDING 時的限制

執行自訂函數時的注意事項

執行自訂函數時的注意事項

在資料表的設定中使用函數

在資料表的設定中使用函數

在資料表的設定中使用函數

在資料表的設定中使用函數

在資料表的設定中使用函數

在資料表的設定中使用函數

在資料表的設定中使用函數

在資料表的設定中使用函數

在自訂函數中使用敘述的限制 可用 DECLARE 敘述來宣告要使用於函數中的變數, 而這些變數的有效範圍只限於函數中;當函數結束時, 宣告的變數也會跟著消失。 可用 SET 敘述將資料指定給變數。 若使用 SELECT 敘述, 則必須將查詢結果指定給變數。 可使用 INSERT、UPDATE、DELETE 敘述針對函數中的 table 變數做處理。

在自訂函數中使用敘述的限制 可使用流程控制敘述, 如 IF、WHILE 等, 但禁用TRY...CATCH 敘述。 可用 EXECUTE 敘述來執行延伸預存程序。其他預存程序或 SQL 字串則不可執行。 可在函數中建立 CURSOR 、前後移動 CURSOR 中的記錄位置、或使用 FETCH...INTO 將資料存入變數中。

在自訂函數中使用敘述的限制 在函數中不可更改到資料庫的任何設計、設定、或資料表內容。我們只能擷取、計算資料, 或是修改在函數中宣告的變數內容。 所執行的敘述不可直接傳回資料集給應用程式, 例如不可用 “SELECT 姓名 FROM ...”, 而應改為“SELECT @var= 姓名 FROM ..." 將查詢結果存入變數中。

決定性與非決定性函數 決定性函數 非決定性函數

決定性與非決定性函數 自訂函數已設定了 SCHEMABINDING 選項。 在自訂函數中沒有呼叫任何『非決定性』的自訂函數或內建函數。 在自訂函數中沒有使用到任何的資料庫物件 (但在函式中宣告的 table 變數除外), 例如資料表、檢視表等。 自訂函數中沒有呼叫任何的延伸預存程序。

決定性與非決定性函數 當資料表或檢視表的計算欄位中有使用到『非決定性』函數時, 該欄位將不允許用來建立索引。 當檢視表中有使用到『非決定性』函數時, 則該檢視表將不允許建立叢集索引 ( Clustered index)。

設定 SCHEMABINDING 時的限制 在自訂函數中所使用到的檢視表及其他自訂函數, 都必須是已經設定為 SCHEMABINDING 的。 自訂函數與其中使用到的所有物件, 都必須位於同一個資料庫內。 建立函數的人, 必須對函數中使用到的所有物件 (資料表、檢視表、及自訂函數) 擁有 References 權限:

設定 SCHEMABINDING 時的限制

15-4 使用順序物件

使用順序物件

使用順序物件

使用順序物件

使用順序物件 用 SQL 語法建立順序物件 用 SQL 語法修改順序物件或重新開始編號 用 SQL 語法刪除順序物件 在 SSMS 中新增、修改、更名、刪除順序物件 NEXT VALUE FOR 的使用技巧

用 SQL 語法建立順序物件

用 SQL 語法建立順序物件 CREATE SEQUENCE sequence_name 建立順序物件,在 sequence_name 中也可包含結構描述 (Schema)。 AS integer_type 指定順序物件的數值型別,必須為下表中的整數型別,或是小數位數為 0 的 numeric(decimal)。

用 SQL 語法建立順序物件 START WITH <constant> INCREMENT BY <constant> MINVALUE <constant>、MAXVALUE <constant> CYCLE | { NO CYCLE } CACHE [<constant> ] | NO CACHE

順序物件的快取原理 第 1 次取號時, 系統會先由順序物件中取出 50 個編號 (1~50) 第 2 次取號時, 會傳回 2 並將記憶體中的二個值改為 2 及 48 第 51 次取號時, 系統會再由順序物件中取出 50 個編號 (51~100)

順序物件的快取原理

用 SQL 語法修改順序物件或重新開始編號 1. 沒有 AS integer_type: 2. 須將 START 改為 RESTART:

用 SQL 語法修改順序物件或重新開始編號

用 SQL 語法刪除順序物件

在 SSMS 中新增、修改、更名、刪除順序物件

在 SSMS 中新增、修改、更名、刪除順序物件

NEXT VALUE FOR 的使用技巧 在 DECLARE、SET、或 SELECT 子句中設定變數的值:

NEXT VALUE FOR 的使用技巧 使用 SELECT...INTO 或 INSERT...VALUES 來新增記錄:

NEXT VALUE FOR 的使用技巧 使用於 UPDATE 子句更改記錄:

NEXT VALUE FOR 的使用技巧 用來做為欄位的預設值。底下將順序物件設為序號欄的預設值:

NEXT VALUE FOR 的使用技巧 順序物件用於 SELECT 敘述時若需要排序, 不可使用ORDER BY 子句來排序 (會視為錯誤), 而必須改用 OVER(ORDER BY...) 子句才行:

NEXT VALUE FOR 不適用的場合 當資料庫在唯讀模式中。 不能做為資料表值函式、彙總函式的參數。 不能用於子查詢、檢視表、使用者自訂函數、或計算欄位中。 不能用在包含 DISTINCT、UNION、UNION ALL 的敘述中。 不能用在包含 ORDER BY 子句的敘述中 (但可以搭配 OVER (ORDER BY...) 子句來排序)。

NEXT VALUE FOR 不適用的場合 不能用在下列子句中: FETCH、OVER、OUTPUT、ON、PIVOT、UNPIVOT、GROUP BY、HAVING、或 FOR XML。 在使用 CASE、CHOOSE、COALESCE、IIF、ISNULL 或 NULLIF 的條件運算式中。 不能用在 WHERE 子句、或不屬於 INSERT 陳述式的 VALUES 子句中。 不能用在檢查條件約束的定義中 (但可以用在預設值條件約束的定義中)。

NEXT VALUE FOR 不適用的場合 不能用在規則物件或預設值物件的定義中, 也不能做為使用者定義資料表類型的預設值 (有關規則物件、預設值物件、及使用者定義資料表類型, 可參見附錄 B)。 不能用在包含 TOP、OFFSET 的敘述中,或是設定 ROWCOUNT 選項時。 不能用在 MERGE 敘述中 (除非 NEXT VALUE FOR 已用於目標資料表的預設值條件約束中, 而且預設值用於 MERGE 陳述式的 CREATE 敘述中)。

NEXT VALUE FOR 的使用技巧 如果想要向順序物件一次取得 “連續的” 多個編號, 可改用 sp_sequence_get_range 預存程序來取 號, 例如: