广告
返回顶部
首页 > 资讯 > 精选 >Oracle触发器和程序包如何创建
  • 651
分享到

Oracle触发器和程序包如何创建

2023-07-02 15:07:33 651人浏览 安东尼
摘要

今天小编给大家分享一下oracle触发器和程序包如何创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、触发器的概念1、触

今天小编给大家分享一下oracle触发器和程序包如何创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    一、触发器的概念

    1、触发器的基本概念

    触发器本身是一段程序代码,类似于存储过程和函数,但是与存储过程和函数不同的是,存储过程和函数创建后保存在oracle数据库中,如果要执行需要用户调用才可以。触发器创建完成后,以独立的对象存储在oracle数据库中,根据事先定义的触发事件来决定是否执行,只要发生这些触发事件,触发器就会自动执行。另外,触发器不能接收参数。
    触发器通常由触发器头部和触发体两部分组成,可以具体细分为如下几方面。
    1、作用对象:包括数据表、视图、数据库和模式。
    2、触发事件:指可以引起触发器执行的事件。例如,DML语句中对数据表或者视图执行数据操作的insert、update、delete语句;DDL语句中执行创建、修改或者删除的cretae、alter、drop语句以及数据库系统的事件,包括oracle系统启动或者退出、异常错误等。
    3、触发条件:由when子句指定的一个逻辑表达式,当触发事件发生时,如果该逻辑表达式的值为true时,触发器就会自动执行。
    4、触发事件:指触发器指令执行是在触发事件发生之前,还是在触发事件发生之后。
    5、触发级别或者触发频率:分为语句级和行级触发器。语句级触发器是默认的,指触发事件发生后,触发器只执行一次;行级触发器指触发事件每作用于一个记录,触发器就执行一次。

    2、触发器的分类

    根据触发器的使用范围不同,可以把触发器分为3种:DML触发器、instead of触发器和系统触发器。
    1、dml触发器
    在执行dml语句时触发,可以定义为insert、update、delete操作,也可以定义在操作之前或者之后触发,也可以指定为行级触发或者语句级触发。
    2、instead of触发器
    它也被称为替代触发器,它是oracle专门为视图设计的一种触发器。在oracle数据库中,一般不能直接对两个以上的表建立的视图进行一般的触发器操作,如果必须修改,就使用替代触发器。
    3、系统触发器
    在oracle数据库的系统事件发生时进行触发,例如系统启动或者退出、异常错误等,这种系统触发器称为数据库触发器;或者发生ddl语句时触发,例如执行创建、修改或者删除的create、alter、drop语句等,这种触发器称为模式触发器。

    二、触发器的创建

    基本语法

    create or replace trigger<触发器名><触发时间><触发事件>on<表名>|<视图名>|<数据库名>|<模式名>[for each row][when<条件表达式>]begin<pl/sql语句>end

    其中的参数说明如下:
    1、or replace为可选参数,如果数据库中已经存在要创建的触发器,则先把原先的触发器删除,再重新建立触发器,或者说覆盖原先的触发器。
    2、触发时间包含before和after两种,before指触发器是在触发事件发生之前执行,after指触发器在触发事件发生之后执行。
    3、触发事件,例如insert,update,delete,create,alter,drop等。
    4、<pl/sql语句>是要执行的触发器操作。

    1、DML触发器的创建

    dml触发器在执行dml语句时触发,可以分为insert、update和delete操作,可以定义在操作之前或者之后触发,也可以指定为行级触发或者语句级触发。
    1、语句级dml触发器的创建
    它是默认的dml触发器的创建,不使用for each row子句。语句触发器所对应的dml语句影响表中符合条件的所有行,但触发器只执行一次,并且不再使用when条件语句。

    创建触发器,当对student表进行添加记录、更新记录和删除记录的时候,判断是否是工作时间段,如果不是工作时间段,不允许执行。

    create or replace trigger tri_detectbefore insert or update or delete --定义触发时间和触发事件on studentbeginif to_char<sysdate,'HH24:MI'> not between '09:00' and '17:00';--给出判断条件的工作时间or to_char<sysdate,'DY','nls_date_lancuage=american'> in <'sat','sun'> thenraise_application_error<-20005,'不是正常的工作时间,不能执行dml操作'>;--不符合条件,给出提示信息end if;end;

    在数据表student上创建触发器,当在该表上插入、删除或者更新的时候,记录操作日志

    create or replace trigger tri_logafter insert or delete or update on student --定义触发事件和触发时间declarevar_user varchar2<20>;var_action varchar2<20>;--定义局部变量beginselect distinct user into var_user from all_users;--获取用户if inserting then--判断是否是“插入”insert into stu_log values<var_user,'插入',sysdate>;elsif deleting the--判断是否是“删除”insert into stu_log values<var_user,'删除',sysdate>;else--判断是否是“更新”insert into stu_log values<var_user,'更新',sysdate>;end if;end;

    INSTEAD OF触发器的创建

    在创建之前先创建一个视图,视图关联数据表,student、teacher。

    create view test_view asselect s.id,s.name,t.id,t.namefrom student s,teacher twhere s.id=t.sid;

    这个时候我们向视图中插入数据会报错,我们只有通过创建instead of触发器来实现。

    创建instead of 触发器已实现修改视图test_view中的内容

    create or replace trigger tri_viewinstead of inserton test_viewfor each rowdeclarevar_row dept%rowtype;beginselect * into var_row from student where id=:new.id;if sql%found theninsert into student<id,name,class> values <:new.id,:new.name,:new.class>;end if;exceptionwhen no_data_found theninsert into student<id,name> values<:new.id,:new.name>;insert into teacher<id,name,sid> values<:new.id,:new.name,:new.sid>;end;

    3、系统触发器

    当登录或者退出的时候,向日志表中添加数据

    create or replace trigger user_loginafter loGon on database--登录触发begininsert into user_log<user_name,login_date> values <ora_login_user,systimestamp>;end user_login;

    4、触发器的禁用和启用

    在oracle数据库中,触发器可以修改他的状态,使其有效或者无效,即启用或者禁用
    语法格式如下。
    alter trigger 触发器名称 [disable | enable]
    参数说明:disable是触发器禁用参数,既使触发器处于无效状态;enable是触发器启用参数,即使触发器处于有效状态。
    例如下面禁用触发器
    alter trigger tri_ddl disable;

    5、触发器的查看和删除

    想查看所有的触发器信息,可以使用数据字典user_triggers,这个数据字典有很多字段可以查看所有触发器的名称、类型、表名、拥有者等信息。

    select trigger_name,trigger_type,table_name from user_triggers;

    删除触发器

    drop trigger 触发器名称

    三、程序包

    1、程序包的创建

    程序包由包规范和包体两部分组成,因此程序包的创建也分为两部分,分别为包规范的创建和包体的创建。
    1、包规范的创建
    包规范提供应用程序的接口,在包规范中声明程序包中可以使用的变量、数据类型、存储过程、函数、异常等。不过函数和过程只包括原型信息,即只有头部的声明,不包括任何实现的代码,其实现代码在包体中定义。以下是语法格式。

    create or replace package 程序包名称isias类型声明 | 变量声明 | 异常声明 | 过程声明 | 函数声明end [程序包名称]

    包体的创建
    在包体中包含规范中声明的过程和函数的实现代码,此外,还可以声明其他没有在包规范中声明的变量、类型、过程、函数,但他们只能在包中使用,不能被其他应用程序调用。下面就是语法格式

    create or replace package body 程序包名称isias[<内部变量声明>][过程体][函数体]end [程序包名称]

    2、程序包的删除

    删除包括两步,先删除程序包体,再删除包规范。语法如下

    drop package body 程序包名称drop package 程序包名称

    以上就是“Oracle触发器和程序包如何创建”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Oracle触发器和程序包如何创建

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

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

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

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

    下载Word文档
    猜你喜欢
    • Oracle触发器和程序包如何创建
      今天小编给大家分享一下Oracle触发器和程序包如何创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、触发器的概念1、触...
      99+
      2023-07-02
    • Oracle触发器和程序包的基本介绍
      目录一、触发器的概念1、触发器的基本概念2、触发器的分类二、触发器的创建1、DML触发器的创建3、系统触发器4、触发器的禁用和启用5、触发器的查看和删除三、程序包1、程序包的创建2、程序包的删除四、总结一、触发器的概念 ...
      99+
      2022-07-05
      Oracle触发器 Oracle程序包
    • sql如何创建触发器
      要创建触发器,您可以使用 SQL 的 CREATE TRIGGER 语句。以下是创建触发器的基本语法: CREATE TRIGGER...
      99+
      2023-10-26
      sql
    • MySQL如何创建触发器
      本文实例为大家分享了MySQL创建触发器的具体代码,供大家参考,具体内容如下 先来个实例: #建表 DROP TABLE IF EXISTS t_attendance; CREATE TABLE...
      99+
      2022-10-18
    • MySQL中如何创建触发器
      不知道大家之前对类似MySQL中如何创建触发器的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完MySQL中如何创建触发器你一定会有所收获的。1. 背景  ...
      99+
      2022-10-18
    • MySQL触发器如何创建与删除
      这篇文章主要介绍“MySQL触发器如何创建与删除”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL触发器如何创建与删除”文章能帮助大家解决问题。1.为什么需要...
      99+
      2022-10-19
    • Oracle中如何用序列和触发器实现ID自增
      小编给大家分享一下Oracle中如何用序列和触发器实现ID自增,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为...
      99+
      2022-10-18
    • 教你如何通过PL/SQL创建序列和触发器实现表自增字段
      目录1.通过PL/SQL创建序列:2.通过PL/SQL创建触发器假设我们有一个address表,希望实现地址编号address_id的自增 1.通过PL/SQL创建序列: 首先,新建Sequences对象 选择序列...
      99+
      2022-11-24
      PL/SQL创建序列和触发器实现表自增字段 PL/SQL表自增字段 PL/SQL创建序列 PL/SQL创建触发器
    • 如何导出存储过程、函数、包和触发器的定义语句?如何导出表和索引的创建语句?
      Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程?  麦苗答:方法有多种,可以使用DB...
      99+
      2022-10-18
    • Oracle 12c如何使用SQL*Plus来创建与删除应用程序容器
      小编给大家分享一下Oracle 12c如何使用SQL*Plus来创建与删除应用程序容器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下...
      99+
      2022-10-18
    • 如何实现SQL查询出表、存储过程、触发器的创建时间和最后修改时间
      本篇内容主要讲解“如何实现SQL查询出表、存储过程、触发器的创建时间和最后修改时间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现SQL查询出表、存储过程...
      99+
      2022-10-18
    • Android开发中如何为程序创建桌面快捷方式
      这期内容当中小编将会给大家带来有关Android开发中如何为程序创建桌面快捷方式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体如下:private void addShortcut() { In...
      99+
      2023-05-31
      android roi
    • PHP打包Shell框架:如何快速创建高效的Web应用程序?
      在Web应用程序开发中,选择一个高效的框架是至关重要的。PHP打包Shell框架是一个值得考虑的选择。它是一个轻量级的框架,允许快速创建高效的Web应用程序。在本文中,我们将探讨如何使用PHP打包Shell框架来创建一个简单的Web应用程...
      99+
      2023-08-14
      打包 shell 框架
    • 如何使用 ASP 和 JavaScript 创建跨平台应用程序?
      ASP和JavaScript是两种非常流行的Web开发技术,常用于创建各种类型的应用程序。这两种技术都可以用于创建跨平台应用程序。在本文中,我们将讨论如何使用ASP和JavaScript创建跨平台应用程序。 ASP是一种服务器端脚本语言,用...
      99+
      2023-06-21
      npm javascript linux
    • 如何使用PHP和Git创建自己的Web应用程序?
      在现代互联网时代,Web应用程序已经成为了人们日常生活中不可或缺的一部分。随着技术的发展,越来越多的人开始学习如何创建自己的Web应用程序。本文将介绍如何使用PHP和Git创建自己的Web应用程序,并给出一些演示代码。 一、什么是PHP和G...
      99+
      2023-06-30
      http 关键字 git
    • 如何使用Git和PHP创建自己的Web应用程序?
      在当今世界,Web应用程序已经成为了我们日常生活中不可或缺的一部分。对于那些想要创建自己的Web应用程序的人来说,Git和PHP是两个非常有用的工具。在本文中,我们将学习如何使用Git和PHP创建自己的Web应用程序。 Git是一个版本控制...
      99+
      2023-06-30
      http 关键字 git
    • 如何使用 Go 语言和 JavaScript 创建实时应用程序?
      实时应用程序是当今互联网领域中最热门的技术之一。实时应用程序可以让用户在不需要刷新页面的情况下获取最新的数据,并立即响应用户的操作。这种应用程序通常用于聊天应用、实时协作和多人在线游戏等场景中。在本文中,我们将介绍如何使用 Go 语言和 ...
      99+
      2023-09-08
      实时 教程 javascript
    • 如何使用Python打包文件框架创建一个独立的应用程序?
      好的,以下是文章内容: Python是一种流行的编程语言,它具有强大的库和框架,可以用于各种应用程序的开发。Python的一个强大特性是它可以使用打包文件框架来创建独立的应用程序,这样用户就可以轻松地运行程序,而不必安装Python或其他依...
      99+
      2023-06-22
      打包 文件 框架
    • 如何在MySQL中使用PHP编写触发器和存储过程
      在MySQL中使用PHP编写触发器和存储过程可以通过以下步骤实现:1. 连接到MySQL数据库:使用PHP的`mysqli`或`PD...
      99+
      2023-10-10
      MySQL
    • 如何利用PHP教程和二维码容器创建一个完美的Web应用程序?
      Web应用程序开发是一个充满创造性和挑战性的领域。PHP是一种流行的服务器端脚本语言,被广泛应用于Web开发。二维码容器是一种可以将信息编码成二维码的工具。本文将介绍如何利用PHP教程和二维码容器创建一个完美的Web应用程序。 第一步:安...
      99+
      2023-07-09
      教程 二维码 容器
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作