sql学习总结(8)——游标和触发器技术

8.1创建游标

语法格式:

declare 游标名 [insensitive] cursor

[local | global]

[forward_only | scroll]

[static | keyset | dynamic |fast_forward]

[read_only | scroll_locks | optimistic]

[type_warning]

for SQL语句

[for [read only | update]]

8.2读取游标中的数据信息

语法格式:

fetch [next | prior |first | last]

[absolute n |relative n]

from 游标名 [into 变量名]

注意:@@fetch_status是一个全局变量,表示返回fetch命令的状态:


返回值


意义


0


fetch命令被成功执行


-1


fetch命令失败或者行数据超过游标数据结果集的范围


-2


所读取的数据已经不存在

use db_company

declare db_cursor5 scroll cursor

for

select * from 职工 where 性别 is not null

open db_cursor5

fetch first from db_cursor5

fetch next from db_cursor5

fetch last from db_cursor5

fetch prior from db_cursor5

fetch absolute 2 from db_cursor5

fetch relative 2 from db_cursor5

close db_cursor5

deallocate db_cursor5

8.3利用游标判断并输出数据

if @@fetch_status=0

begin

declare @t varchar(10)

declare @t1 varchar(10)

declare @t2 int

fetch first from db_cursor6 into @t,@t1,@t2

select @t as 职工号,@t1 as 职工名,@t2 as 工资

end

else

begin

print ‘不存在该记录’

end

8.4利用游标修改和删除数据

use db_company

declare db_cursor7 cursor scroll

for

select * from 职工

open db_curror7

fetch first from db_cursor7

update 职工 set 工资=工资+88 where current of db_curror7

fetch absolute 4 from db_cursor7

delete from 职工 where current of db_cursor7

close db_cursor7

deallocate db_cursor7

8.5利用游标逐条显示数据库中的记录

fetch first from db_cursor8

while @@fetch_status=0

begin

fetch next from db_curror8

end

8.6在存储过程中使用游标

create procedure db_mypro

@x int

as

begin

declare mycursor scroll cursor

for

select * from 职工

open mycursor

fetch absolute @x from mycursor

close mycursor

deallocate mycursor

end

db_mypro 2

8.7查看游标属性

利用sp_cursor_list查看当前服务器的游标及其属性,语法格式:

sp_cursor_list [@cursor_return= ] cursor_variable_name output,[@cursor_scope= ] cursor_scope

利用sp_describe_cursor查看游标的全局属性,语法格式:

sp_describe_cursor [@cursor_return= ] output_cursor_variable output

{ [ , [ @cursor_source= ] N’local’

, [ @cursor_identity= ] N’local_cursor_name’ ]

| [ , [ @cursor_source= ] N’global’

, [ , [ @cursor_identity= ] N’global_cursor_name’ ]

| [ , [ @cursor_source= ] N’variable’

, [@cursor_identity= ] N’input_cursor_variable’ ]

}

8.8创建触发器

触发器是一种特殊类型的存储过程,主要通过事件触发而被执行。

事后触发器

create trigger 触发器名 on 表名 [with encryption] for insert[,update,delete] as

begin

命令行或程序块

end

替代触发器

create trigger 触发器名 on 表名或视图名 instead of insert [, update,delete] as

begin

命令行或程序块

end

注意:触发器只能关联表或视图。为了保护代码触发器的代码内容,可以利用with encryption加密触发器中的代码内容。after只能定义在表中,不能到视图上。而instead of可以定义在视图上。

create trigger db_trigger4 on 仓库 for update

as

begin

declare @old char(10)

declare @new char(10)

select @new=仓库号 from inserted

select @old=仓库号 from deleted

update 职工set 仓库号[email protected] where 仓库号[email protected]

end

8.9修改、删除和查看触发器

8.9.1修改触发器

把create改成alter即可。

8.9.2查看触发器基本信息

execute sp_help db_trigger1       select * from sys.triggers (查看所有)

8.9.3查看触发器所使用数据对象信息

execute sp_depends db_trigger1

8.9.4查看触发器功能代码

execute sp_helptext db_trigger1

8.9.5删除触发器

drop trigger {triggername}[,n]

triggername表示要删除的触发器名,n表示可以同时删除多个触发器。

时间: 2024-11-13 08:10:50

sql学习总结(8)——游标和触发器技术的相关文章

oracle学习总结5(游标、触发器、过程、方法)

1:捕获plsql抛出的异常 declarev_ename emp.ename%type;beginselect ename into v_ename from emp where empno=10;exceptionwhen too_many_rows thendbms_output.put_line('太多值了');when others thendbms_output.put_line('error');end;/ 2:游标 declare cursor c is select * fro

sql学习笔记(21)-----------触发器

触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 语法: create trigger triggerName after/before insert/update/delete on 表名 for each row   #这句话在mysql是固定的 begin sql语句; end

sql学习总结(1)——数据库技术

1.1创建数据库 1.1.1创建默认数据库 create database db_sqldata     (db_sqldata是数据库名) 1.1.2创建指定数据库文件位置的数据库 create database Mydatabase1 on ( name=Mydatabase1_data, filename=’e:\mydata\Mydatabase1_data.mdf’, size=4, maxsize=10, filegrowth=10% ) log on ( name=Mydataba

Oracle之PL/SQL学习笔记之触发器

Oracle之PL/SQL学习笔记之触发器 触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行. 即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT. UPDATE及D

SQL学习(时间,存储过程,触发器)

SQL学习 几个操作时间的函数 1 --datapart 获取时间中的年月日时分秒等部分 2 select DATEPART(year,current_timestamp); 3 select DATEPART(DAY,current_timestamp); 4 select DATEPART(MONTH,current_timestamp); 5 6 --dateadd 在相应时间上加上年月日时分秒等 7 select CURRENT_TIMESTAMP,DATEADD(DAY,10,CURR

Oracle 学习笔记 16 -- 游标(PL/SQL)

在PL/SQL程序中,对于处理多行记录的事务经常使用游标来实现.当执行查询语句或者数据操纵语句是,一般可能会产生或者处理一组记录.游标是为了处理这些记录而分配的一段内存区. 游标分为:显示游标和隐示游标.当记录集中只有单行数据时,系统自动的进行定义右边,称为隐示游标.记录集中含有多行数据时,需要用户自己定义游标,称为显示游标.下面分别进行介绍. 显示游标 显示游标的处理需四个使用步骤: 1.定义游标: 就是定义一个游标名,以及与其对应的select 语句. 格式: CURSOR cursor_n

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正. PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL—Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以嵌套

SQL Server基础之<游标>

查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标   游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行.用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立即执行或输出. 1.游标的概念  游标是一种处理数据的方法,主要用于存储过程,触发器和 T_SQL脚本中,它们使结果集的内容

【Oracle】第五章游标和触发器

第五章游标和触发器 游标: 隐式游标:%FOUND, %NOTFOUND ,%ROWCOUNT 1.%FOUND 用法,只有在DML 语句影响一行或者多行时,%FOUND 属性才返回 TRUE.下列示例演示了 %FOUND 的用法: begin update employees2 set first_name = 'scott' where employee_id = 2; if SQL%found then dbms_output.put_line('数据已经更新'); --  dbms_ou