6 存储过程与触发器 (1)存储过程是T-SQL语句的集合,它作为数据库对象之一被存储在数据库中。

Slides:



Advertisements
Similar presentations
Chapter 3: SQL.
Advertisements

第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
6 Copyright © Oracle Corporation, All rights reserved. 维护控制文件.
数据库原理与SQL Server 第6章 全面掌握SQL Server 2000.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
Chap 13 視界與資料庫程式設計.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
Oracle数据库 Oracle 子程序.
在PHP和MYSQL中实现完美的中文显示
第五讲 利用视图进行查询优化.
第 8 章 資料的 新增、修改與刪除.
6 存储过程与触发器 (1)存储过程是T-SQL语句的集合,它作为数据库对象之一被存储在数据库中。
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
課程名稱:資料庫系統 授課老師:李春雄 博士
第 16 章 觸發程序.
SQL Server 2000 数据库入门.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
第7章 ADO.NET操作SQL Server数据库
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
管理信息结构SMI.
SQL Injection.
辅导课程六.
第5章 SQL的高级应用 教学目标:通过本章学习,明确索引与视图的作用,掌握索引及视图的使用方法;掌握存储过程与触发器的创建及使用方法。
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
医院职工公费医疗系统.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一讲: 基本流程(1).
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第9章 存储过程和触发器 本章导读: 存储过程和触发器都不是标准的SQL语句,不同的数据库管理系统在具体实现时语法会有所不同。存储过程是一组Transact-SQL语句和可选控制语句的预编译集合,它是按名存储并运行于服务器上,独立于表的数据库对象。而触发器是一种在关系表上定义,伴随用户修改相关数据而自动执行的特殊存储过程,主要用于强化复杂的规则和要求。
数据库技术.
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
实验七、 数据完整性和数据安全性 机械工业出版社.
SQL Server 2000数据库 简明教程 李存斌 主编 下一页.
数据库应用技术 SQL Server 2005.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
ORACLE 第九讲 触发器.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
SQL 范引娣.
第10章 触发器的创建和使用 10.1 触发器概述 10.2 创建触发器 10.3 修改触发器 10.4 删除触发器.
商业分析平台-语义元数据 用友集团技术中心 边传猛 2013年 11月 06日.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
第三章 SQL Server数据管理.
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
数据库系统与应用实验 基于SQL Server 2005.
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
第9章 存储过程的创建和使用 9.1 存储过程简介 9.2 创建存储过程 9.3 修改存储过程 9.4 删除存储过程 9.5 执行存储过程.
Visual Basic程序设计 第13章 访问数据库
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
回归分析实验课程 (实验三) 多项式回归和定性变量的处理.
YOUR SUBTITLE GOES HERE
VB与Access数据库的连接.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
RefWorks使用指南 归档、管理个人参考文献.
培训课件 AB 变频器的接线、操作及参数的备份 设备动力科.
JUDDI安装手册.
Presentation transcript:

6 存储过程与触发器 (1)存储过程是T-SQL语句的集合,它作为数据库对象之一被存储在数据库中。 (2)存储过程的作用和使用方式类似于一些编程语言中的过程。 使用存储过程有以下优点: 1)可以在一个存储过程中执行多条SQL语句; 2)可通过输入参数的变化调用存储过程进行动态执行; 3)存储过程在创建时就在服务器端进行了编译,节省SQL语句的运行时间; 4)提供了安全机制,它限制了用户访问SQL语句的权利,只为特定用户开放存储过程。

6.1 创建存储过程 用户首先创建存储过程以实现特定的功能,然后可在程序中调用该存储过程执行。 1.使用企业管理器创建视图 【例5-63】在School数据库中,创建存储过程proc_Course, 查询所有课程信息。 1)打开企业管理器,展开School数据库文件夹,右单击“存储过程”,在弹出的快捷菜单上选择“新建存储过程”命令,打开新建存储过程对话框。 2)将“[OWNER]”和“[PROCEDURE NAME]”参数分别替换成存储过程所有者的名称和存储过程的名称。默认为dbo和[PROCEDURE NAME]。

3)从“文本”列表框的第二行开始输入存储过程的T-SQL语句。这里输入的T-SQL语句仅有一条: SELECT * FROM T_Course。 4)单击【语法检查】按钮可以检查创建存储过程的T-SQL语句的语法是否正确。单击【另存为模板】按钮可将所创建的存储过程设置为模板。 5)完成后,单击【确定】按钮即创建和保存了存储过程proc_Course。 图5-64 创建存储过程示例

2.使用T-SQL语句创建存储过程 可以直接在SQL查询分析器中定义和调用存储过程。 常用存储过程的语法格式: CREATE PROC[DURE] 存储过程名 {@形式参数 数据类型}[VARYING][=默认值][OUTPUT] AS SQL语句1 … SQL语句n 说明: “形式参数”名称必须符合标识符规则;OUTPUT表示该参数是可以返回的,可将信息返回调用者;如果有多个参数,可以依次按以上参数定义规则列出,用逗号“,”隔开。

【例5-64】在School中创建一个的存储过程proc_SearchStudent,查询指定学生的选课情况。 CREATE PROC proc_SearchStudent @stcode char(8) AS SELECT T_Student.StudentName,T_Course.CourseName FROM T_Student JOIN T_Grade JOIN T_Course ON T_Grade.CourseCode=T_Course.CourseCode ON T_Student.StudentCode=T_Grade.StudentCode WHERE T_Student.StudentCode=@scode

采用“参数=值”的形式,各个参数的顺序可以任意排列。 6.2 执行存储过程 存储过程定义后,可通过EXECTE语句来执行。 语法格式: EXEC[UTE] 存储过程名[[@形参=]实参值|@变量[OUTPUT]|[DEFAULT]] 1)“@形参”是创建存储过程时定义的形参名; 2)“实参值”是输入参数的值; 3)“@变量”表示用来保存参数或者返回参数的变量;OUTPUT表示指定参数为返回参数; 4)DEFAULT表示使用该参数的默认值作为实参。 5)如有多个参数,可依次按以上参数定义规则列出,用逗号“,”隔开。 调用【例5-63】创建的存储过程proc_Course的语句为: EXEC proc_Course 调用【例5-64】创建的存储过程proc_SearchStudent,查询‘05101101’学生的选课情况。 EXEC proc_SearchStudent '05101101' 或 EXEC proc_ SearchStudent @scode='05101101' 实参顺序和定义时的参数顺序一致。 采用“参数=值”的形式,各个参数的顺序可以任意排列。

【例5-65】在School中创建一个的存储过程proc_SearchStudentAvgGrade,查询某个学生的选课数目和平均成绩。 本例是带一个输入参数和二个输出参数的存储过程,在定义输出参数时要用OUTPUT进行说明。 CREATE PROC proc_SearchStudentAvgGrade @stcode char(8), @stcount int OUTPUT,@stavg int OUTPUT AS SELECT @stcount=COUNT(T_Grade.StudentCode),@stavg=AVG(T_Grade.Grade) FROM T_Grade WHERE T_Grade.StudentCode=@stcode GROUP BY T_Grade.StudentCode 调用存储过程proc_SearchStudentAvgGrade,查询‘05101101’学生的选课数目和平均成绩。 DECLARE @scount int ,@savg int EXEC proc_SearchStudentAvgGrade '05101101',@scount OUTPUT,@savg OUTPUT PRINT ‘学生’+ ‘05101101’+‘的选课数目为’+CAST(@scount AS char(2))+'门' PRINT ‘学生+ ’05101101‘+’的平均成绩为'+STR(@savg,5,2)+'分

6.3 查看、修改和删除存储过程 用户可以利用企业管理器或T-SQL语句来查看、修改和删除用户创建的存储过程。 1.使用企业管理器创建视图 (1)查看和修改存储过程 在企业管理器中,展开存储过程所属的数据库,单击“存储过程”文件夹,在右边窗格中就可看到所有存储过程; 右击相应的存储过程名,在弹出的快捷菜单上选择“属性”命令,打开存储过程属性窗口,出现和创建存储过程相似的窗口,在中间的文本编辑子窗口中可以查看或修改该存储过程的文本。 (2)删除存储过程 右击要删除的存储过程名,在弹出的快捷菜单上选择“删除”命令,弹出“除去对象”对话框。单击【显示相关性】按钮可查看该存储过程所依附的对象,从而了解删除该存储过程对数据库的影响。单击【全部除去】按钮,即删除了相应的存储过程。

6.4 触发器 触发器是一种特殊的存储过程。触发器的创建主要用来维护数据表中的数据一致性,当对数据表进行插入、删除、更新等操作时,触发器可自动执行。 SQL Server提供了两种类型的触发器: (1)AFTER触发器:是在表中数据被修改之后才被触发,触发器对变动的数据进行检查,如果发现错误,将拒绝或回滚变动的数据。 (2)INSTEAD OF触发器:在数据修改以前被触发,并取代修改数据的操作,转去执行触发器定义的操作。

6.4.1 创建触发器 1.使用企业管理器创建触发器 【例5-68】在School数据库中创建一个简单的触发器tri_StudentInsDel,当用户插入或删除T_Student表中学生记录时,能自动显示表中的内容。 1)展开School“数据库/表”文件夹,在右边窗格中表中,右击T_Student表,在弹出的快捷菜单上选择“所有任务/管理触发器”命令,打开触发器属性对话框。

当对表T_Student的数据进行插入或删除操 作时,触发器“tri_StudentUpdate”将会自动执行。 2)系统创建触发器语句了CREATE TRIGGER的框架。修改框架中的内容为: CREATE TRIGGER tri_StudentInsDel ON [dbo].[T_Student] FOR INSERT, DELETE AS SELECT * FROM T_Student 3)单击【语法检查】按钮可以检查创建触发器的T-SQL语句的语法是否正确。 4)单击【确定】按钮即保存和创建了名称为“tri_StudentInsDel”的触发器。 当对表T_Student的数据进行插入或删除操 作时,触发器“tri_StudentUpdate”将会自动执行。

2.使用T-SQL创建触发器 触发器语法格式: CREATE TRIGGER 触发器名 ON 表名|视图名 FOR [INSERT][,UPDATE][,DELETE]} AS SQL语句段 【例5-69】在School数据库的T_Student表上创建一个触发器tri_StudentCodeUpdate,当对学号列进行修改时,给出提示信息并取消修改操作。 CREATE TRIGGER tri_StudentCodeUpdate ON T_Student FOR UPDATE AS DECLARE @text varchar(50) IF UPDATE(StudentCode) BEGIN SET @text='学生数据被修改!!!' RAISERROR(@text,16,1) ROLLBACK TRANSACTION END RAISEERROR(@text,16,1)语句的作用是返回用户定义的错误信息,并给出与信息关联的严重级别(1~18)和有关错误调用状态的信息(1~127 ) 。这里分别取“16”和“1”。

【例5-70】在School数据库的T_Grade表上创建一个触发器tri_Grade,当向T_Grade表中插入一条记录时,检查该记录的学号是否在T_Student表中,如果不存在则取消插入操作,否则显示“插入操作成功完成”。 CREATE TRIGGER tri_Grade ON T_Grade FOR INSERT AS DECLARE @text varchar(50) IF EXISTS(SELECT * FROM inserted WHERE inserted.StudentCode NOT IN (SELECT StudentCode FROM T_Student)) BEGIN SET @text='学生的学号不存在,将取消该插入操作 ' RAISERROR(@text,16,1) ROLLBACK TRANSACTION END Else SET @text='插入操作成功完成' SELECT @text

6.4.2 查看、修改和删除触发器 1)在企业管理器,展开“表”文件夹,右击触发器所属的表,在弹出的快捷菜单上选择“所有任务/管理触发器”命令,打开触发器属性对话框。在名称栏可选择已建立的触发器。修改方法同创建方法相同。 2)如要删除,单击【删除】按钮,在弹出的确认对话框中单击【是】,即删除了所选择的触发器。