广告
返回顶部
首页 > 资讯 > 精选 >Oracle触发器和游标的示例分析
  • 331
分享到

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

2023-06-20 13:06:08 331人浏览 薄情痞子
摘要

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

小编给大家分享一下oracle触发器和游标的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

触发器:

1、 创建一个用于记录用户操作的触发器

  创建一个dept_log数据表,并在其中定义两个字段(operate_tag varchar2(10),operate_time date),分别用来存储操作种类(插入,修改,删除)信息和操作日期。然后一个关于dept表的语句级触发器tri_dept,将用户对 dept 表的操作信息保存到dept_tag表中。

当任何时候从dept表中删除某个部门时,该触发器将从emp表中删除该部门的所有雇员。

-- 创建表create table dept_log(operate_tag varchar2(10),operate_time date);create table dept(dname varchar2(20),dno number);-- 创建触发器create or replace trigger tri_deptbefore insert or update or deleteon deptdeclarev_tag varchar2(10);beginif inserting thenv_tag:='插入';elsif updating thenv_tag:='修改';elsif deleting thenv_tag:='删除';end if;insert into dept_log values(v_tag, sysdate);end tri_dept;/

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

2、创建一个当删除部门时,删除该部门下的所有雇员的触发器

当任何时候从dept表中删除某个部门时,该触发器将从emp表中删除该部门的所有雇员。

注意:所有的以sysdba登录的账户都不能创建触发器,因此需要在创建的用户下面创建触发器

-- 创建部门表create table dept(    deptno number not null,    dname varchar(20) not null);-- 创建员工表create table emp(    emp_no number not null,    emp_name varchar(20) not null,    job varchar(20) not null,    sal number  not null,    deptno number not null);--插入数据insert into dept values(10, '部门1');insert into dept values(20, '部门2');insert into emp values(1001, '员工1', '工作1', 5000, 10);insert into emp values(1002, '员工2', '工作2', 7200, 10);insert into emp values(1003, '员工3', '工作3', 6000, 10);insert into emp values(1004, '员工4', '工作4', 5000, 20);insert into emp values(1005, '员工5', '工作5', 7000, 20);
-- 创建触发器create or replace trigger del_deptbefore delete on deptfor each rowbegindelete from emp where deptno = :old.deptno;end;/

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


3、创建一个在account表插入记录之后,更新myevent数据表的触发器

创建了一个TRIG_INSERT的触发器,在向表account插入数据之后会向表myevent插入一组数据(表结构就不创建了…)

create or replace trigger trig_insertafter inserton accountbeginif inserting theninsert into myevent values(1, 'after insert');end if;end;/

4、创建一个用于记录登录 DBA 身份用户的用户名和时间的触发器

以DBA 身份登录数据库,并创建一个名为db_log的数据表,用于记录登录用户的用户名和时间。
接着分别创建数据库启动和数据库关闭触发器,并向db_log数据表中插入记录,存储登录用户的用户名和操作时间。

--创建表create table db_log(name varchar2(20),rtime timestamp);-- 创建触发器,用于记录用户登录create or replace trigger trigger_startupafter startupon databasebegininsert into db_log values('user', sysdate);end;/-- 创建触发器,用于记录用户退出create or replace trigger trigger_shutdownbefore shutdownon databasebegininsert into db_log values('xiuyan', sysdate);end;/

游标:

以下题目基于部门表和员工表:

-- 创建表create table emp(empno number,ename varchar2(20),job varchar2(20),sal number,deptno number);create table dept(deptno number,dname varchar2(20),loc varchar2(20));-- 插入数据insert into dept values(10,'account','new york');insert into dept values(20,'salesman','chicaGo');insert into dept values(30,'research','dallas');insert into dept values(40,'operations','boston');insert into emp values(1001,'mary','account',5000,10);insert into emp values(2001,'smith','salesman',6000,20);insert into emp values(3001,'kate','research',7000,30);

1、使用隐式游标和 for 语句检索出职务是销售员(salesman)的雇员信息并输出

beginfor emp_record in(select empno, ename, sal from emp where job='salesman')loopdbms_output.put('雇员编号:'||emp_record.empno);dbms_output.put('; 雇员名称:'||emp_record.ename);dbms_output.put_line('; 雇员编号:'||emp_record.sal);end loop;end;/

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


2、员工工资上调20%,使用隐式游标输出上调工资的员工数量

把 emp 表中销售员(即salesman)的工资上调20%,然后使用隐式游标 sql 的 %ROWCOUNT 属性输出上调工资的员工数量。

beginupdate emp set sal=sal*(1+0.2) where job='salesman';if sql%notfound thendbms_output.put_line('没有雇员需要上调工资');elsedbms_output.put_line('有'|| sql%rowcount ||'个雇员需要上调工资');end if;end;/

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


3、用显示游标和for语句检索出部门编号是30的雇员信息并输出

declarecursor cur_emp isselect * from emp where deptno = 30;beginfor emp_record in cur_emploopdbms_output.put('雇员编号:'||emp_record.empno);dbms_output.put('; 雇员名称:'||emp_record.ename);dbms_output.put_line('; 雇员职务:'||emp_record.job);end loop;end;/

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


4、声明游标检索员工信息,并使用%FOUND属性来判断

声明一个游标,用于检索指定员工编号的雇员信息,然后使用游标的%FOUND属性来判断是否检索到指定员工编号的雇员信息。

declarev_ename varchar2(50);v_job varchar2(50);cursor cur_emp isselect ename, job from emp where empno = &empno;beginopen cur_emp;fetch cur_emp into v_ename, v_job;if cur_emp%found thendbms_output.put('雇员编号:'||v_ename ||',职务是:'||v_job );elsedbms_output.put('无数据记录');end if;end;/

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


5、创建游标完成数据转移,将fruit表中单价大于10的记录放到fruitage表中

创建 fruit 表并插入数据

-- 创建水果表create table fruit(f_id    varchar2(10)    not null,f_name  varchar2(255)  not null,f_price  number (8,2)  not null);--插入数据insert into fruit values  ('a1', 'apple',5.2);insert into fruit values ('b1','blackberry', 10.2);insert into fruit values ('bs1','orange', 11.2);insert into fruit values('bs2','melon',8.2);insert into fruit values ('t1','banana', 10.3);insert into fruit values ('t2','grape', 5.3);insert into fruit values ('o2','coconut', 9.2);

创建表fruitage,表fruitage和表fruit的字段一致,利用以下语句创建:

create table fruitage as select * from fruit where 2=3;-- 如果WHERE后面的条件为真,则复制表时把数据也一起复制。-- 不加默认会复制数据。

创建游标,完成数据转移,将fruit表中,单价大于10的记录放到fruitage表中。

declare v_id fruit.f_id %TYPE;v_name fruit.f_name %TYPE;v_price fruit.f_price %TYPE;cursor frt_cur isselect f_id, f_name, f_price from fruit where f_price>10;beginopen frt_cur;loopfetch frt_cur into v_id, v_name, v_price;if frt_cur%found theninsert into fruitage values(v_id, v_name, v_price);elsedbms_output.put_line('已取出所有数据,共有'||frt_cur%ROWCOUNT||'条记录');exit;end if;end loop;close frt_cur;end;/

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

以上是“Oracle触发器和游标的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Oracle触发器和游标的示例分析

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Oracle触发器和游标的示例分析
    小编给大家分享一下Oracle触发器和游标的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!触发器:1、 创建一个用于记录用户操作的触发器  创建一个dep...
    99+
    2023-06-20
  • CLR触发器的示例分析
    这篇文章主要介绍了CLR触发器的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。CLR触发器实现代码:[Microsoft.SqlServer.Server.SqlTr...
    99+
    2023-06-17
  • 快速学习Oracle触发器和游标
    目录触发器:1、 创建一个用于记录用户操作的触发器2、创建一个当删除部门时,删除该部门下的所有雇员的触发器3、创建一个在account表插入记录之后,更新myevent数据表的触发器...
    99+
    2022-11-12
  • MySQL与Oracle 差异比较之触发器的示例分析
    小编给大家分享一下MySQL与Oracle 差异比较之触发器的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!触发器编号类...
    99+
    2022-10-18
  • MySQL游标和异常处理的示例分析
    这篇文章给大家分享的是有关MySQL游标和异常处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。复杂异常处理drop procedure ...
    99+
    2022-10-18
  • mysql触发器之创建多个触发器操作的示例分析
    这篇文章将为大家详细讲解有关mysql触发器之创建多个触发器操作的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。这次记录的内容mysql 版本必须得是5.7.2+...
    99+
    2022-10-18
  • MySQL中流程控制和游标的示例分析
    小编给大家分享一下MySQL中流程控制和游标的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!学习或者了解过编程语言的都知道,任何一门编程语言都不可能只通过一两句语句代码完成。流程控...
    99+
    2022-10-19
  • MySQL中存储函数、触发器的示例分析
    这篇文章主要介绍了MySQL中存储函数、触发器的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 创建函数: 1....
    99+
    2022-10-19
  • Vue3中触发组件选项的示例分析
    小编给大家分享一下Vue3中触发组件选项的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事件名与组件和prop一样,事件...
    99+
    2022-10-19
  • Oracle优化器的示例分析
    这篇文章主要介绍Oracle优化器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、优化器的模式      优化器的模式用...
    99+
    2022-10-19
  • HTML5开发Kinect体感游戏的示例分析
    小编给大家分享一下HTML5开发Kinect体感游戏的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!HTML5开发Kin...
    99+
    2022-10-19
  • javascript中createjs小游戏开发的示例分析
    这篇文章主要介绍javascript中createjs小游戏开发的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 实现一个无缝连接的背景图,模拟出汽车在加速的状态this...
    99+
    2022-10-19
  • MySQL中触发器和游标的介绍与使用
    触发器简介 触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,比数据库本身标准的功能有更精细和更复杂的数据控制能力。 触发器的优点: 安全性:可以...
    99+
    2022-11-11
  • kubernetes中控制器和标签的示例分析
    小编给大家分享一下kubernetes中控制器和标签的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!01 k8s中的常用控制器      之前我们了解了Pod是k8s集群中调度的最小单...
    99+
    2023-06-14
  • go:垃圾回收GC触发条件的示例分析
    这篇文章将为大家详细讲解有关go:垃圾回收GC触发条件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是gogo是golang的简称,golang 是Google开发的一种静态强类型、编译型、...
    99+
    2023-06-14
  • web理论和HTML标签的示例分析
    这篇文章给大家分享的是有关web理论和HTML标签的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   1,什么是web?   web是运行在internet上最流行...
    99+
    2022-10-19
  • MySQL数据库的触发器和存储过程实例分析
    这篇文章主要介绍“MySQL数据库的触发器和存储过程实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL数据库的触发器和存储过程实例分析”文章能帮助大家解决问题。一、实验目的掌握某主流D...
    99+
    2023-07-02
  • html5 datalist选中option选项后触发事件的示例分析
    这篇文章将为大家详细讲解有关html5 datalist选中option选项后触发事件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用input + datalist 实现自动补全功能,其中d...
    99+
    2023-06-09
  • Java中并发容器的示例分析
    这篇文章给大家分享的是有关Java中并发容器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、并发容器1.1 JDK 提供的并发容器总结JDK 提供的这些容器大部分在java.util.concurre...
    99+
    2023-06-15
  • CSS和Sass开发规范的示例分析
    这篇文章将为大家详细讲解有关CSS和Sass开发规范的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ID and class naming ID和class(类)...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作