返回顶部
首页 > 资讯 > 数据库 >游标和触发器
  • 893
分享到

游标和触发器

游标和触发器 2021-03-07 05:03:15 893人浏览 无得
摘要

第八章  游标和触发器   初识游标 在PL/sql块中执行SELECT、INSERT、DELETE和UPDATE语句时,oracle会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指

游标和触发器

第八章  游标和触发器

 

初识游标

在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;

 

 

您可能感兴趣的文档:

--结束END--

本文标题: 游标和触发器

本文链接: https://lsjlt.com/news/4890.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 游标和触发器
    第八章  游标和触发器   初识游标 在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指...
    99+
    2021-03-07
    游标和触发器
  • 快速学习Oracle触发器和游标
    目录触发器:1、 创建一个用于记录用户操作的触发器2、创建一个当删除部门时,删除该部门下的所有雇员的触发器3、创建一个在account表插入记录之后,更新myevent数据表的触发器...
    99+
    2024-04-02
  • sqlserver中怎么实现触发器和游标
    本篇文章为大家展示了sqlserver中怎么实现触发器和游标,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代码如下: Create trigger tri_wk_...
    99+
    2024-04-02
  • Oracle触发器和游标的示例分析
    小编给大家分享一下Oracle触发器和游标的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!触发器:1、 创建一个用于记录用户操作的触发器  创建一个dep...
    99+
    2023-06-20
  • MySQL中触发器和游标的介绍与使用
    触发器简介 触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,比数据库本身标准的功能有更精细和更复杂的数据控制能力。 触发器的优点: 安全性:可以...
    99+
    2024-04-02
  • 对比索引、视图、游标、存储过程和触发器
    1、索引        1-1、索引的概述                 我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。这个表的记录大致为列的内容和该列所在记录的物理地址。        1-2、...
    99+
    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、实例说明...
    99+
    2023-03-13
    oracle 触发器 oracle触发器语句 oracle创建触发器语句
  • Oracle DML触发器和DDL触发器实例详解
    目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL...
    99+
    2023-03-13
    oracle 触发器 oracle触发器语句 oracle创建触发器语句
  • Oracle DML触发器和DDL触发器怎么使用
    今天小编给大家分享一下Oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-05
  • 触发器和存储过程
    触发器和存储过程   1.触发器   在进行dml操作的时候(insert,update,delete),可以对事件进行监听和响应,这种机制在数据库中叫做触发器。  ...
    99+
    2024-04-02
  • 存储过程和触发器
      一.打开sql server数据库 1. 使用Windows身份验证登入 2. 设置身份验证 3. 切换用户登入sql server ...
    99+
    2024-04-02
  • 触发器
    触发器概述 触发器是一种特殊的存储过程,与普通存储过程的区别: 触发器的执行是与实践触发的,而普通存储过程是有命令调用执行的 使用触发器有助于强制保持出具的数据完整性。可以防止恶意的插入、删除、修改 创建触发器 CREATE T...
    99+
    2021-11-06
    触发器
  • Oracle学习(七) --- PL/SQL(二) 游标、储存过程、自定义函数、触发器
    1、PL/SQL -- 游标 1.1、什么是游标 当在PL/SQL中使用SQL语句时,Oracle会为其分配上下文区域,这是一段私有的内存区域,用于暂时保存SQL语句影响到的数据。游标是指向这段内存区域的指针。游标并不是一个数据库对象,只是...
    99+
    2022-02-04
    Oracle学习(七) --- PL/SQL(二) 游标 储存过程 自定义函数 触发器
  • 触发器insert
    USE [stalentzx]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[GZ_HISTORY_INSERT]ON [dbo].[ySysColu...
    99+
    2020-05-08
    触发器insert
  • MySQL触发器
    1、 触发器定义: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进...
    99+
    2019-06-10
    MySQL触发器
  • MySQL——触发器
    基本语法 //创建触发器 CREATE TRIGGER name //删除触发器 DROP TRIGGER name 创建触发器 在创建触发器时需要给出4条信息 唯一的触发器名 触发器需要关联的表 触发器应该响应...
    99+
    2020-02-06
    MySQL——触发器
  • 触发器 trigger
    触发器是被指定关联到一个表的数据对象,它不需要调用,当对一个表的特别事件出现时,它就被激活。触发器的代码也是由SQL语句组成的,因此用在存储过程中的语句也可以用再触发器的定义中。触发器是一类特殊的存储过程,与表的关系密切,用于保护...
    99+
    2019-12-09
    触发器 trigger
  • SQL触发器
    翻看博客,发现居然没有触发器使用说明,现补上。  触发器触发的时候两个特殊的表:    插入表(instered表):Inserted表的数据是插入或是修改后的数据    删除表(deleted表...
    99+
    2024-04-02
  • oracle 触发器
    -- Create table a  触发器create table T_AC_TEST(  ID     ...
    99+
    2024-04-02
  • MySQL-触发器
    一、触发器 触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作