Oracle数据库(触发器、存储过程、函数、包)

2024-09-07 00:58

本文主要是介绍Oracle数据库(触发器、存储过程、函数、包),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、触发器(trigger)

推荐练习文档:

http://wenku.baidu.com/link?url=brtd9myO4XIaEjRPaRB0yWgV2_TfXmNxS6KKjB_avq7d0hPs3SknJdrs-JLtWe–H-f3q-I61HUxkcqqAFMC0z6Zf65QBbmFRB8TAlULmGS
http://www.cnblogs.com/friends-wf/p/3793417.html存储过程练习
http://blog.csdn.net/indexman/article/details/8023740/(推荐博客触发器)(强烈推荐!!!)

触发器会被编译且存储在数据库服务器中。由一个事件来启动运行,即触发器是当某个事件发生时自动隐式运行。并且触发器不能接收参数。所以运行触发器就叫触发或点火。oracle事件指的是对数据库的表进行insert、update及delete操作或对视图进行类似的操作。oracle将触发器的功能扩展到了触发oracle,如数据库的启动和关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计功能。

1、创建触发器

create [or replace] trigger 触发器名
before|after|instead of 某个事件 on 表名|视图名|database|用户名.schema
[for each row [when]]
PL/SQL块|调用过程(call procedure_name)

or replace:如果数据库已经存在同名的触发器,则替换
before|after:指定触发时间点
instead of:替换视图操作,只能为行级触发器
某个事件:指定当发生什么操作的时候,触发触发器
on:指定基于什么创建触发器
for each row [when]:表示改变每行数据时,执行一次触发器
PL/SQL块|调用过程(call procedure_name):触发器执行时,执行的代码

2、触发器分类:

关于触发器先前介绍:

before触发器:在触发语句运行前先运行触发动作

create [or replace] trigger 触发器名
before insert|delete|update on 表名
before create|drop|alter on database|用户名.schema 
[for each row [when]]
PL/SQL块|调用过程(call procedure_name)

行级触发器:当某触发事件发生时,对受到该操作影响的每一行数据,触发器都单独执行一次。指定了for each row选项。

create [or replace] trigger 触发器名
before|after|instead of insert|delete|update on 表名|视图名
for each row [when]
PL/SQL块|调用过程(call procedure_name)
在行级触发器的PL/SQL块和when子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为new、old。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在when子句中则不加冒号。

触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。

(1) 替代触发器

由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8专门为进行视图操作的一种处理方法。

(2) 系统触发器

ORACLE 8i 提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发,如ORACLE系统的启动与关闭等。

(3)语句级触发器

当某触发事件发生时,该触发器只执行一次。未指定for each row选项。

create [or replace] trigger 触发器名
before|after insert|delete|update on 表名|视图名
before|after create|drop|alter on database|用户名.schema 
PL/SQL块|调用过程(call procedure_name)

其中行级触发器对DML语句影响的每个行执行一次.语句级触发器对每个DML语句执行一次,如果在TABLE表中插入的数据为500行,那么这个表上的语句级触发器只执行一次

这篇关于Oracle数据库(触发器、存储过程、函数、包)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143612

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.