我的编程空间,编程开发者的网络收藏夹
学习永远不晚

游标和触发器

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

游标和触发器

游标和触发器

第八章  游标和触发器

 

初识游标

在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。它为应用等量齐观提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法,是设计嵌入式SQL语句的应用程序的常用编程方式。

       定位行,逐行跳动

游标分类

1. 显式 游标用于处理SELECT语句返回的多行数据;人为创建,干预

2. 隐式 游标用于处理SELECT INTO和非查询的DML语句;系统自动创建,管理

   

常用属性   CURSOR

%ISOPEN

 用于确定游标是否已经打开。如果游标已经打开,则返回值为TRUE;否则返回FALSE

  %FOUND

 检查是否从结果集中提取到数据。如果提取到数据,则返回值为TRUE;否则返回FALSE

  %NOTFOUND

 与%FOUND属性恰好相反,如果提取到数据,则返回值为FALSE;否则返回TRUE

 %ROWCOUNT

 返回到当前行为止已经提取到的实际行数

 

显示游标格式:

1. 定义游标

    CURSOR cursor_name IS select_SQL;

    2. 打开游标

    OPEN cursor_name;

    3. 提取数据

FETCH cursor_name INTO variable1,variable2,...;

当运行fetch后,游标才开始工作,记录当前行,有数据则下移,然后置%FOUND,%NOTFOUND的值

4. 关闭游标

CLOSE cursor_name;

 

显示游标:

 

游标动态传参,显示游标

 

隐式for循环游标:

 

隐含游标,当执行一条非查询的DML语句或者SELECT...INTO语句时,都会创建一个隐含游标

1. 隐含游标的名称是SQL,不能对SQL游标显式执行OPEN、FETCH和CLOSE语句。

2. Oracle隐式地打开、提取,并总是自动地关闭SQL游标

3. 隐含游标的属性

    SQL%FOUND

SQL%NOTFOUND

SQL%ROWCOUNT

SQL%ISOPEN

 

示例

declare

  v_stuId number := "&input_stuId";

begin

  delete from student where stu_id=v_stuId;

  if sql%found then

    DBMS_OUTPUT.PUT_LINE("找到员工");

  else

    DBMS_OUTPUT.PUT_LINE("未找到员工");

  end if;

end;

 

初始触发器

触发器是指被隐含执行的存储过程,它可以使用PL/SQL进行开发

当发生特定事件(如修改表、创建对象、登录到数据库)时,Oracle会自动执行触发器的相应代码

触发器的类型

1、DML触发器

在对数据库表进行DML(insert,update,delete)操作时触发,并且可以对每行或者语句操作上进行触发。

2、替代触发器

是oracle8专门为进行视图操作的一种触发器

3、系统触发器

对数据库系统事件进行触发,如启动、关闭等

 

注意事项:

1. 触发器不接受参数。

2. 一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。

3. 在一个表上的触发器越多,对在该表上的DML操作的性能影响就越大。

4. 触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。

5. 触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。

 

 

表头复制

CREATE TABLE dept_log AS SELECT * FROM dept WHERE 1=2;

 

DML触发器

删除示例:

create or replace trigger tr_del_student

       --指定触发时机为删除操作前触发

       before delete

       on student

       --说明创建的是行级触发器 

       for each row

begin

      --将修改前数据插入到日志记录表,要确保SQL可以正常工作

      insert into student_log values(:old.stu_id,:old.stu_name,:old.stu_age,:old.stu_sex,:old.stu_class,:old.stu_create_date);

end;

 

 

 

修改示例

create or replace trigger tr_update_student

       --指定触发时机为修改操作后触发

       after update

       on student

       for each row

begin

       -- 记录修改后的值

      insert into student_log

values(:new.stu_id,:new.stu_name,:new.stu_age,:new.stu_sex,:new.stu_class,:new.stu_create_date);

end;

 

 

 

删除触发器

drop trigger trigger_name

 

 

系统触发器

 

 

 

创建日志记录表

create table log_event(

  log_type varchar2(20),

  username varchar2(20),

  logonTime date,

  logoffTime date

);

登录触发器

create or replace trigger logon_trigger

after logon on database

begin

  insert into log_event(log_type,username,logonTime)

  values("logon",ora_login_user,sysdate);

end;

 

登出触发器

create or replace trigger logoff_trigger

before logoff on database

begin

  insert into log_event(log_type,username,logoffTime)

  values("logoff",ora_login_user,sysdate);

end;

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

游标和触发器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

游标和触发器

第八章  游标和触发器 初识游标在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area)
游标和触发器
2021-03-07

Oracle触发器和游标的示例分析

小编给大家分享一下Oracle触发器和游标的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!触发器:1、 创建一个用于记录用户操作的触发器  创建一个dep
2023-06-20

对比索引、视图、游标、存储过程和触发器

1、索引       1-1、索引的概述                我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。这个表的记录大致为列的内容和该列所在记录的物理地址。       1-2、索引的优缺点            
对比索引、视图、游标、存储过程和触发器
2020-01-22

Oracle DML触发器和DDL触发器实例详解

目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL 事件3.3、可用属性3.4、实例说明总结一、概念触发器
2023-03-13

Oracle DML触发器和DDL触发器实例详解

Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码器,下面这篇文章主要给大家介绍了关于Oracle DML触发器和DDL触发器的相关资料,需要的朋友可以参考下
2023-03-13

Oracle DML触发器和DDL触发器怎么使用

今天小编给大家分享一下Oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、概念
2023-07-05

触发器

触发器概述触发器是一种特殊的存储过程,与普通存储过程的区别:触发器的执行是与实践触发的,而普通存储过程是有命令调用执行的使用触发器有助于强制保持出具的数据完整性。可以防止恶意的插入、删除、修改创建触发器CREATE TRIGGER 触发器名ON { 表名 |
触发器
2021-11-06

Oracle学习(七) --- PL/SQL(二) 游标、储存过程、自定义函数、触发器

1、PL/SQL -- 游标1.1、什么是游标当在PL/SQL中使用SQL语句时,Oracle会为其分配上下文区域,这是一段私有的内存区域,用于暂时保存SQL语句影响到的数据。游标是指向这段内存区域的指针。游标并不是一个数据库对象,只是留存在内存中。游标是系统
Oracle学习(七) --- PL/SQL(二) 游标、储存过程、自定义函数、触发器
2022-02-04

触发器insert

USE [stalentzx]GOSET ANSI_NULLS ONGO
2020-05-08

MySQL 触发器

文章目录 1.简介2.行级与语句级触发器3.触发时机4.触发器优缺点5.创建触发器语法示例 6.查看触发器7.删除触发器参考文献 1.简介 触发器(Trigger)是与表关联的命名数据库对象,当表发生特定事件时激活。 触发器
2023-08-30

触发器 trigger

触发器是被指定关联到一个表的数据对象,它不需要调用,当对一个表的特别事件出现时,它就被激活。触发器的代码也是由SQL语句组成的,因此用在存储过程中的语句也可以用再触发器的定义中。触发器是一类特殊的存储过程,与表的关系密切,用于保护表中的数据,当有操作影响到触发
触发器 trigger
2019-12-09
2024-04-02

MySQL触发器

1、 触发器定义:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delet
MySQL触发器
2019-06-10

sql触发器的三种触发方式

sql 触发器的触发方式有:before:在数据修改前触发,用于强制业务规则。after insert:在插入新行后触发,用于向其他表添加或更新数据。after update:在更新现有行后触发,用于更新相关表或记录更改历史。SQL 触发器
sql触发器的三种触发方式
2024-04-13

编程热搜

目录