1、 浅析数据库论文浅析数据库论文_导读:OMcursor_name|cursor_variable_name如果这个函数的返回植为 0,则表示游标打开成功,否则表示游标打开失败。FETCH_STATUS() 函数报告上一个 FETCH 语句的状态,一般有三种取值:0FETCH 语句成功-1FETCH 语句失败或此行不在结果集中-24利用游标修改数据被提取的行不存在如果游标定义为可更新的,则当定位在学号:1104014013班级:12 计本(3) 数据库课程论文胡丽丽游标,触发器,存储过程一、游标(一) 、游标简介 数据库的游标是类似于 C 语言指针的语言结构。通常情况下,数据库执行 的大多数 S
2、QL 命令都是同时处理集合内部的所有数据。但是,有时用户也需要 对这些数据集合中的某一行进行操作。在没有游标的情况下,这种工作不得不放 到数据库前端用高级语言来实现,这将导致不必要的数据传输,从而延长执行时 间。通过使用游标就可以在服务器端有效地解决这个问题。游标支持以下功能: 在结果集中定位特定行。从结果集的当前位置检索行。支持对结果集中当前位置的行进行数据修改。(二) 、使用游标 游标主要用在存储过程、触发器和 Transact_SQL 脚本中。用户可以把它理 解为一种特殊变量,也必须先声明后使用。游标的使用可以总结为 6 个步骤:声 明游标、打开游标、提取数据、修改数据、关闭游标、释放游
3、标。1.声明游标声明游标的语法如下: DECLARE cursor_name INSENSITIVE SCROLL CURSOR FOR select_statement FOR READ ONLY | UPDATE OF column_name ,.n 其中: cursor_name : 为游标名称。游标命名必须遵从 Transact-SQL 标识符规则。2.打开游标在使用游标之前,必须首先打开游标,方可执行指定操作。语法格式如下: OPEN GLOBAL cursor_name | cursor_variable_name 其中:GLOBAL:指定 cursor_name 为全局游标。cu
4、rsor_name:已声明的游标名称。打开一个游标以后,可以使用无参函数 ERROR 来判断打开操作是否 成功。3.从游标中提取记录使用 FETCH 语句可以从游标中提取特定的一行记录。其语法格式如下: FETCH NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | nvar |RELATIVE n|nvar FROM GLOBAL cursor_name | cursor_variable_name INTO variable_name ,.n 如果这个函数的返回植为 0,则表示游标打开成功,否则表示游标打开失败。FETCH_STATUS()函数报告上一个
5、FETCH 语句的状态,一般有三种取值: 0 FETCH 语句成功 -1 FETCH 语句失败或此行不在结果集中 -24利用游标修改数据被提取的行不存在如果游标定义为可更新的,则当定位在游标 5 6 浅析数据库论文_(2)导读:中的某一行时,可以使用 UPDATE 或 DELETE 语句中的 职工 FOR UPDATE OPEN gz_cursor FETCH NEXT FROM gz_cursor INTO salary gz_cursor INTO salary END CLOSE gz_cursor DEALLOCATE gz_cursor 二、触发器 (一) 、触发器简介 触发器属于一
6、种特殊的存储过程,可以在其中包含复杂的 SQL 语句。触发 器与存储过程的区别在于触发器能够自动执行并且不含有参数。通常可以在触发 器内编写一段自动执行的程序, 用于保证数据操作的完整性,从而扩展了对默认 值、约束和规则的完整性检查。对表进行包括添加数据、删除数据、更新数据中 的一种或多种操作时,触发器就会自动执行。触发器可以划分为三种类别:INSERT 触发器、DELETE 触发器、UPDATE 触发器。这三种触发器分别在发生数据的添加、删除、修改行为时自动执行。(二) 、触发器的优点 触发器有助于在添加、更新或删除表中的记录时保留表之间已定义的关系。触发器可以自动调用, 当发生了对数据所作
7、的任何修改时,与之相关触发器就会 立刻被激活。可以完成数据库中相关表之间的级联修改。级联修改是指为了保证数据之间 的逻辑性以及依赖关系, 在对一张表进行修改的同时,其他表中需要进行的修改 能够自动实现。触发器可以对需要存储的数据加以限 5 6 浅析数据库论文_(3) 导读:结束后,两个临时表会自动被系统删除。对临时表可以进行查询操作,如 SELECT*FROMDELETED,但是不能对临时表进行修改【例 11-7】说明 INSERTED 表和 DELETED 表的作用USETESTGOCreatetriggertrig1ontable9forinsert,update,deleteAsprin
8、tinserted 表select*frominsertedprint deleted 表se制, 并且能够实现比 CHECK 约束更为复杂 的功能。在 CHECK 约束中不允许引用其他表中的列,而触发器可以引用。(三) 、触发方式 触发器的触发方式可以分为后触发和替代触发两种方式。后触发:指能够引发触发器的修改操作在完成之后才执行触发器的行为方 式。创建该类触发器,需要使用 AFTER 关键字或者 FOR 关键字。替代触发:指定执行一个触发器,而不是执行 SQL 语句,这种替代触发语 句的方式称为替代触发 (四) 、使用 CREATE TRIGGER 语句创建触发器 CREATE TRIGG
9、ER 语句的部分语法格式: CREATE TRIGGER 触发器名称 ON 表名 | 视图名 DELETED,但是不能对临时表进行修改 【例 11-7】说明 INSERTED 表和 DELETED 表的作用 USE TEST GO Create trigger trig1 on table9 for insert,update,delete As print inserted 表 select * from inserted print deleted 表 select * from deleted Go 执行 DELETE 语句 DELETE from table9where c1=2 运行
10、结果: insert 表: C1 C2 -(所影响的行数为 0 行) delete 表: C1 C2 -吴用 (所影响的行数为 1 行) (五) 、使用 ALTER TRIGGER 语句修改触发器 ALTER TRIGGER 语句与 CREATE TRIGGER 语句的语法格式及其参数类 似,部分语法格式为: ALTER TRIGGER 触发器名称 ON 表名 | 视图名 WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE AS SQL 语句 .n 【例】 修改 del_bj 触发器 5 6 浅析数据库论文_(4)
11、导读:,这可以简化一系列复杂语句。存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快,且能减少 X 络通信的负担。使用存储过程的注意事项:在命名自定义存储过程时避免与系统存储过程名相同。存储过程最多能够支持 32 层的嵌套。命名存储过程中的标识符时,长度不能超过 128个字符。存储过程中参数的,使得在班级表中删除某一个班级时,不仅在学生基本 信息表中该班级所包含的学生信息将被删除, 而且在成绩表中与学生相关的数据 也将被删除。在查询分析器中运行如下命令: ALTER TRIGGER del_bj ON 班级表 AFTER DELETE AS DELETE FROM 成绩表
12、 学生基本信息表 DELETED) DELETE FROM 学生基本信息表 DELETED) (六) 、使用 DROP TRIGGER 语句删除触发器 移除触发器时,与触发器有关的信息将从 sysobjects 和 sysments 系统表 中删除。可以通过删除触发器或删除表两种方式移除触发器。删除表时,将除去 所有与表相关联的触发器。DROP TRIGGER 语句的语法格式为: DROP TRIGGER 触发器名称 ,.n 触发器名称为数据库中现有的触发器。可以指定一个或多个触发器名称来删 除一个或多个触发器。【例】删除触发器 del_bj 以及 insert_xs。在查询分析器中运行如下命
13、令: USE XSCJ GODROP TRIGGERdel_bj , insert_xs三、存储过程 (一)、存储过程简介 存储过程是存储在服务器上的由 SQL 语句和控制流语句组成的一个预编译 集合,以一个名称存储并作为一个单元处理。存储过程划分为系统存储过程以及 用户存储过程。存储过程提供了封装某一个需要重复执行任务的方法。一旦定义了一个存储 过程之后,在应用程序中就可以对其进行调用。在存储过程中,不仅可以包含程 序流、逻辑以及对数据库的查询,而且也可以接受参数、输出参数、返回单个或 多个结果集。所以通过设计自定义用户存储过程,用户可以使其实现强大的编程功能。(二) 、存储过程的优点 可以
14、在单个存储过程中执行一系列 SQL 语句。可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句 快,且能减少 X 络通信的负担。使用存储过程的注意事项: 在命名自定义存储过程时避免与系统存储过程名相同。存储过程最多能够支持 32 层的嵌套。命名存储过程中的标识符时,长度不能超过 128 个字符。存储过程中参数的个数不能超过 2100。(三) 、使用 CREATE PROCEDURE 语句来创建存储过程 该语句可以创建永久使用的存储过程, 也可以创建局部临时过程、 全局临时过程。语法格式为: CREATE PRO
15、CEDURE 存储过程名称 ;数值 5 6 浅析数据库论文_(5)导读:数默认值一般为常量或 NULL3、使用返回参数返回参数应用 OUTPUT 进行说明,返回存储过程执行的结果 4、存储过程的返回值存储过程在执行后都会返回一个整数值,如果执行成功,返回 0;否则返回-1-99 之间的数值,可以使用RETURN 语句来指定一个返回值。(六)、使用ALTERPROCEDURE 语句修改存储过程 ALTERPROCEDURE 语句参数 数据类型 VARYING =参数的默认值 OUTPUT ,n 学生基本信息表,班级表 eter=value,n 2) value,n (顺序需要和定义时的参数顺序相
16、同) 2、使用默认参数 默认参数默认值一般为常量或 NULL 3、使用返回参数 返回参数应用 OUTPUT 进行说明,返回存储过程执行的结果 4、存储过程的返回值 存储过程在执行后都会返回一个整数值,如果执行成功,返回 0;否则返 回-1-99 之间的数值,可以使用 RETURN 语句来指定一个返回值。(六) 、使用 ALTER PROCEDURE 语句修改存储过程 ALTER PROCEDURE 语句可以对数据库中已有的存储过程进行修该,但不 会更改权限,也不影响相关的存储过程或触发器。该语句的语法格式为: ALTER PROCEDURE 存储过程名称 ;数值 参数 数据类型 VARYING
17、 =参数的默认值 OUTPUT ,n WITH REPILE | ENCRYPTION | REPILE , ENCRYPTION FOR REPLICATION AS SQL 语句 .n 【 例】修改已经创建的存储过程 proc_bjcx 及其功能,将其修改为可以根据系部 编号来查询某一个系部中所有学生的信息。修改后将存储过 5 6 浅析数据库论文_(6)导读:命令,即可完成重命名:ALTERPROCEDUREproc_bjcxxbbhVARCHAR(2)ASSELECT*FROM 学生基本信息表班级表Eproc_bjcx,proc_xbcxGO5使用DROPPROCEDURE 语句删除存储过程使用 DROPPROCEDURE 语句可以从当前的数据程名称重命名为 proc_xbcx。在查询分析器中运行如下命令,即可完成重命名: ALTER PROCEDURE proc_bjcx xbbh VARCHAR(2) AS SELECT * FROM 学生基本信息表 班级表 E proc_bjcx , proc_xbcx GO 5使用 DROP PROCEDURE 语句删除存储过程 使用 DROP PROCEDURE 语句可以从当前的数据库中删除一个或多个存储过程。DROP PROCEDURE 语句的语法格式为: DROP PROCEDURE 存储过程名称 ,.n 5 6