oracle实验2023-12-8--触发器

第十四周实验

【例】功能要求:增加一新表XS_1,表结构和表XS相同,用来存放从XS表中删除的记录。

            分析:

1、创建表 xs_1

SQL> create table xs_1 as select * from xs;

Table created

SQL> truncate table xs_1;

Table truncated题目:创建一个触发器,当XS表中记录被删除时,请备份下删除的记录,方式:写到新建表XS_1中,以备查看。

create or replace trigger del_xs

  before delete on  xs

  for each row

begin

      insert into xs_1(xh,xm,zym,xb,cssj,zxf) 

      values          

      (:old.xh,:old.xm, :old.zym, :old.xb, :old.cssj,:old.zxf);

end del_xs;

代码:

SQL> select *from xs_1;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

SQL> select *from xs;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

061101 王林   计算机 男 1986/2/10    50

101112 李明   计算机 男 1986/1/30    36

001    张琼   计算机                 45 三好学生

121112 王小二 计算机 男 1986/1/30    36

SQL> delete from xs where xh=001;

1 row deleted

SQL> select *from xs_1;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

001    张琼   计算机                 45

SQL> select *from xs;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

061101 王林   计算机 男 1986/2/10    50

101112 李明   计算机 男 1986/1/30    36

121112 王小二 计算机 男 1986/1/30    36

SQL>

综上所述:备份成功!

触发器示例2

功能需求:监控用户对XS表的操作,要求:当XS表执行插入、更新和删除3种操作后在sql_info表中给出相应提示和执行时间。

Create table sql_info(info varchar(10),time date);

思考:是否可以放到一个触发器中,如可以则需要判断

到底是哪种操作(插入还是更新还是删除)

create or replace trigger t2

  after delete or insert or update on xs 

  for each row

declare

  v_info sql_info.info%type;

begin

  if inserting then

    v_info:='插入';

    elsif updating then

      v_info:='更新';

      else

        v_info:='删除';

        end if;

        insert into SQL_INFo VALUES(v_info,sysdate);

 

end t2;

SQL> create table sql_info(info varchar(10),time date);

Table created

SQL> select * from sql_info;

INFO       TIME

---------- -----------

SQL> insert into xs(xh) values(21212);

1 row inserted

SQL> select * from sql_info;

INFO       TIME

---------- -----------

插入       2023/12/8 1

SQL>

SQL> select * from xs;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

061101 王林   计算机 男 1986/2/10    50

101112 李明   计算机 男 1986/1/30    36

121112 王小二 计算机 男 1986/1/30    36

21212                                  

SQL> delete from xs where xh=21212;

1 row deleted

SQL> select * from xs_1;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

001    张琼   计算机                 45

21212                                  

SQL> select * from sql_info;

INFO       TIME

---------- -----------

插入       2023/12/8 1

删除       2023/12/8 1

SQL>

1.

SQL>  create table emp_1 as select * from scott.emp;

Table created

SQL> truncate table emp_1;

Table truncated

SQL>

create or replace trigger del_scott

  before delete on scott.emp

  for each row

begin

  insert into emp_1 (empno,ename,job,mgr,hiredate,sal,comm,deptno)

     values (:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);

end del_emp;

测试;

SQL> delete from scott.emp where empno = 7499;

1 row deleted

SQL> select * from scott.emp;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7369 SMITH      CLERK      7902 1980/12/17     820.00               20

 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30

 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20

 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30

 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30

 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10

 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20

 7839 KING       PRESIDENT       1981/11/17    5000.00               10

 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30

 7876 ADAMS      CLERK      7788 1987/5/23     1120.00               20

 7900 JAMES      CLERK      7698 1981/12/3      970.00               30

 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20

 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10

13 rows selected

SQL> select * from emp_1;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30

SQL>

2.

create or replace trigger t2

  after delete or insert or update on xs 

  for each row

declare

  v_info sql_info.info%type;

begin

  if inserting then

    v_info:='插入';

    elsif updating then

      v_info:='更新';

      else

        v_info:='删除';

        end if;

        insert into SQL_INFo VALUES(v_info,sysdate);

 

end t2;

SQL> create table sql_info(info varchar(10),time date);

Table created

SQL> select * from sql_info;

INFO       TIME

---------- -----------

SQL> insert into xs(xh) values(21212);

1 row inserted

SQL> select * from sql_info;

INFO       TIME

---------- -----------

插入       2023/12/8 1

SQL> select * from xs;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

061101 王林   计算机 男 1986/2/10    50

101112 李明   计算机 男 1986/1/30    36

121112 王小二 计算机 男 1986/1/30    36

21212                                  

SQL> delete from xs where xh=21212;

1 row deleted

SQL> select * from xs_1;

XH     XM     ZYM    XB CSSJ        ZXF BZ

------ ------ ------ -- ----------- --- --------------------

001    张琼   计算机                 45

21212                                   

SQL> select * from sql_info;

INFO       TIME

---------- -----------

插入       2023/12/8 1

删除       2023/12/8 1

SQL> update scott.emp set ename='CHenwang' where empno=7900;

1 row updated

SQL>  select * from sql_info;

INFO       TIME

---------- -----------

插入       2023/12/8 1

删除       2023/12/8 1

SQL>

3.

CREATE OR REPLACE TRIGGER  op_emp

BEFORE INSERT OR UPDATE OR DELETE ON scott.emp

FOR EACH ROW

BEGIN

   IF INSERTING THEN

         DBMS_OUTPUT.PUT_LINE(:new.empno||' '||:new.ename);

   ELSIF UPDATING THEN

         DBMS_OUTPUT.PUT_LINE(:old.sal||' '||:new.sal);

   ELSE

         DBMS_OUTPUT.PUT_LINE(:old.empno||' '|| :old.ename);

   END IF;

END op_emp;

SQL> set serveroutput on;

SQL> insert into scott.emp(empno) values(7369);

7369

1 row inserted

SQL> update scott.emp set ename='LAOLI' where empno=7369;

1 row updated

SQL> delete from scott.emp where empno = 7369;

7369 LAOLI

1 row deleted

4.

CREATE OR REPLACE TRIGGER t4  

    AFTER INSERT OR UPDATE OR DELETE

            ON  scott.emp

declare

   v_1  number;  v_2  scott.emp.sal%type;

begin

   if inserting then

         select count(*)  into  v_1 from scott.emp;

         DBMS_OUTPUT.PUT_LINE('添加记录后总人数为'||v_1);

   elsif updating then

          select avg(sal)  into v_2  from scott.emp;

          DBMS_OUTPUT.PUT_LINE('更新记录后平均工资为'||' '||v_2);

   else

       for v_s in (select deptno,count(*) num from scott.emp group by deptno)

       loop

        DBMS_OUTPUT.PUT_LINE('删除记录后各个部门的部门号和人数为' ||v_s.deptno||' '||v_s.num);

       end loop;

  end if;

end t4;

SQL> insert into scott.emp(empno) values(7369);

7369

添加记录后总人数为13

1 row inserted

SQL> update scott.emp set ename='LAOLI' where empno=7369;

更新记录后平均工资为 2218.75

1 row updated

SQL> delete from scott.emp where empno = 7369;

7369 LAOLI

删除记录后各个部门的部门号和人数为30 5

删除记录后各个部门的部门号和人数为20 4

删除记录后各个部门的部门号和人数为10 3

1 row deleted

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

StoneDB-8.0-V2.2.0 企业版正式发布!性能优化,稳定性提升,持续公测中!

​ 11月,StoneDB 新版本如期而至,这一个月来我们的研发同学加班加点,持续迭代:在 2.2.0 版本中,我们针对用户提出的需求和做出了重量级更新,修复了一些已知和用户反馈的 Bug,同时对部分代码进行…

PairLIE论文阅读笔记

PairLIE论文阅读笔记 论文为2023CVPR的Learning a Simple Low-light Image Enhancer from Paired Low-light Instances.论文链接如下: openaccess.thecvf.com/content/CVPR2023/papers/Fu_Learning_a_Simple_Low-Light_Image_Enhancer_From_Paired_Low-Light_Instan…

Kafka安全性探究:构建可信赖的分布式消息系统

在本文中,将研究Kafka的安全性,探讨如何确保数据在传输和存储过程中的完整性、机密性以及授权访问。通过详实的示例代码,全面讨论Kafka安全性的各个方面,从加密通信到访问控制,帮助大家构建一个可信赖的分布式消息系统…

Vue:用IDEA开发Vue,标签语法爆红问题处理

一、场景描述 我在IDEA中,学习Vue课程。 入门学习时,是在html文件中,script引入vue.js文件方式。 此时,在html文件中用v-标签,爆红。 二、解决办法 打开 菜单栏 File - Settings 选择 Editor - Files Type&#xf…

《每天一个Linux命令》 -- (5)通过sshkey密钥登录服务器

欢迎阅读《每天一个Linux命令》系列!在本篇文章中,将介绍通过密钥生成,使用公钥连接管理服务器。 概念 SSH 密钥是用于安全地访问远程服务器的一种方法。SSH 密钥由一对密钥组成:公钥和私钥。公钥存储在远程服务器上,…

软件工程复习

一、题型 单项选择题 20分 填空题 10分 判断题 10分 简答题 18分 应用题 12分 综合题 30分 软件程序数据文档 软件是无形的、不可见的逻辑实体 20世纪60年代末爆发软件危机 软件危机是指软件在开发与维护过程中遇到的一系列严重的问题 …

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式 本文将向您介绍在使用 GET、POST、PATCH 和 DELETE 请求时如何传递参数。通过详细解释每种请求的参数传递方式和示例代码,您将了解如何正确地将数据发送到服务器并与之交互。 GET 请求的参数传递方式 在 GET…

CentOS 7.9安装宝塔面板,安装gitlab服务器

docker安装方式比较慢,安装包1.3GB 安装后启动很慢 docker logs q18qgztxdvozdv_gitlab-ce-gitlab-1 docker ps docker exec -it q18qgztxdvozdv_gitlab-ce-gitlab-1 sh cd /etc/gitlab cat initial_root_password 软件商店安装方式,失败了2023.12…

hook其他调试技巧

输出堆栈信息 通过 android.util.Log 输出当前线程的堆栈跟踪信息。 function showStacks() {Java.perform(function () {console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new() )); }) } 可以在需要的…

机器学习--稀疏学习

前置知识: 通常学习一次模型的过程如下:我们普遍为了获取更好的模型效果,直接对原始数据学习,会造成过拟合、需要特征提取; 而若特征提取完后依旧有很多特征,还是会容易过拟合。这时候就需要特征降维和特…

C/C++端口复用SO_REUSEADDR(setsockopt参数),test ok

端口复用最常用的用途应该是防止服务器重启时之前绑定的端口还未释放或者程序突然退出而系统没有释放端口。这种情况下如果设定了端口复用,则新启动的服务器进程可以直接绑定端口。如果没有设定端口复用,绑定会失败,提示ADDR已经在使用中——…

STM32 寄存器配置笔记——USART DMA发送

一、DMA介绍 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须 CPU 干预,数据可以通过 DMA 快速地移动,这就节省了 CPU 的资源来做其他操作。当产品对于时序要求较严格时,外设使用DMA的方式能够减…

深入了解Java 8日期时间新玩法:DateTimeFormatter与ZoneOffset的使用

推荐语 在这篇文章中,我们将深入探讨Java中的DateTimeFormatter和ZoneOffset类的功能和使用方法。这些类是在Java 8中引入的新的日期时间API的一部分,它们为我们提供了更灵活、更易用的日期和时间处理能力。尽管这些类在Java 8中已经出现,但…

ELK(六)—Filebeat安装部署

目录 一、介绍1.1特点1.2使用原因1.3结构图1.4工作流程 二、安装部署2.1下载2.2启动2.3监控日志文件2.4自定义字段 三、连接Elasticsearch四、工作原理 一、介绍 Filebeat是一个轻量级的日志和文件数据收集器,属于Elastic Stack(ELK Stack)中…

近期Chrome浏览器 不知哪个版本升级后原先http强制跳转到https,导致服务端302强制跳转到http也没反应

关于Chrome更新http强制跳转到https解决方法 近期Chrome浏览器 不知哪个版本升级后原先http强制跳转到https,导致服务端302强制跳转到http也没反应一、F12检查加载的Response Headers中有没有Non-Authoritative-Reason二、找了资料后得到解决方案:三、找…

插入排序——直接插入排序和希尔排序(C语言实现)

文章目录 前言直接插入排序基本思想特性总结代码实现 希尔排序算法思想特性总结代码实现 前言 本博客插入排序动图和希尔排序视频参考大佬java技术爱好者,如有侵权,请联系删除。 直接插入排序 基本思想 直接插入排序是一种简单的插入排序法&#xff…

图空图床图片外链系统源码-支持自定义权限策略-图片大小格式

含视频搭建教程。 大致功能: 支持本地等多种第三方云储存 AWS S3、阿里云 OSS、腾讯云 COS、七牛云、又拍云、SFTP、FTP、WebDav、Minio多种数据库驱动支持,MySQL 5.7、PostgreSQL 9.6、SQLite 3.8.8、SQL Server 2017支持配置使用多种缓存驱动&#xff…

Flameshot的安装、配置及使用

概要:本篇主要介绍在Ubuntu22.04环境下,截图软件Flameshot的安装、配置及使用。 一、安装 推荐命令行安装 sudo apt install flameshot 二、修改gdm3配置文件 这一步是为了解决截图时没有光标的问题,解决方法我是从这里学到的解决flam…

【hugging face】bitsandbytes中8 bit量化的理解

8 位量化使数十亿参数规模的模型能够适应更小的硬件,而不会降低性能。 8 位量化的工作原理如下: 1.从输入隐藏状态中按列提取较大值(离群值)。 2.对 FP16 中的离群值和 int8 中的非离群值执行矩阵乘法。 3.改变非异常值结果以将值…

unity中:搭建在线AR应用

使用Imagine WebAR - Image Tracker插件部署WebGL应用 在使用Imagine WebAR - Image Tracker插件进行WebGL应用开发时,有两个关键知识点需要掌握: 1. 部署到支持HTTPS的服务器 由于WebGL应用需要访问用户的摄像头,因此必须在支持HTTPS的服…