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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与