Oralce 触发器
今天做了一个需要用到触发器实现的功能中间去到了各种问题,还好最后都解决了;
整个过程中真是遇到了不少错误:
ORA-04091: 表 KPGO.T_ISSUER 发生了变化, 触发器/函数不能读它
ORA-04092: COMMIT 不能在触发器中
ORA-04098:触发器“xx.xxx”无效且未通过重新定义
首先说第一个错是因为这样的代码:

原因是
触发器和存储过程中中用:再次去查目标表(就是你触发器服务的那张表),这一动作被oracle认为是不合法的。
目标表的记录行如果做了更新,无需再通过ID去查询目标记录行。这一动作被oracle认为是不合法的。
那咋整!!!咱也不知道,咱也不知道问谁,拉倒吧自己百度
嗯!!!就在那么一瞬间我看到了一个似乎可以拯救我得答案,它得变量赋值方式我很喜欢,必须咱也得弄(neng四声)一下

嗯整挺好 不在报那个错了
但是啊 人啊不能太嚣张 紧接着给我整了个第二个错 ORA-04092: COMMIT 不能在触发器中
当时脑瓜带 嗡一下子 我努力让自己清醒 磕了一袋瓜子喝了杯茶水 我又意识到
触发器里面是不能执行ddl语句和commit操作的 原因就在调用得那个函数里面
既然问题找到了 干他

DDL语句用语定义和管理数据库中的对象,如Create,Alter,Drop,truncate等;
DDL操作是隐性提交的!操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger
DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据。
如insert,delete,update,select等都是DML.
虽然在触发器里没有写ddl语句但是tm这个函数里有,wc我这小脾气就上来了,又是一顿小百度

为触发器添加自治事务,完美解决
至于ORA-04098:触发器“xx.xxx”无效且未通过重新定义这个错,一般就是没仔细有写错得地方,好好看看
还有就是如果你的数据库链接工具是navicat 那你得看看你的触发器是不是完整的,有的时候他可能只给你编译了一半
到这里就OK了,工作以来第一次写触发器,记录一下方便学习
重点:
1.oracle触发器中定义变量得赋值方式要注意下,选择适合自己需求的
2.触发器中每一句语句都要有分号,别懒
3.触发器不能执行ddl语句和commit操作,如果想用加自治事务(但是我好像见过专门的ddl触发器但是真的得是表什么得。。想了解得自己查吧)
Oralce 触发器的更多相关文章
- oralce触发器
n 触发器的分类 DML(insert,delete,update)触发器 DDL(create table ,create view...drop...)触发器 系统触发器(与系统相关的触发器,比 ...
- oralce系统触发器
系统事件是指基于oracle事件(例如logon.logoff和startup.shutdown)所建立的触发器,通过使用系统事件触发器,提供了跟踪系统或是数据库变化机制.下面介绍使用的系统事件属性函 ...
- oralce 存储过程、函数和触发器
一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 创建存储过程 用CREATE PROCEDURE命令建立存储过程. 语法: create [or repl ...
- oracle的触发器
oracle的触发器分为语句级和行级两种类型,在视图上所创建的触发器叫做什么类型的触发器? DML触发器有三类: 1, insert触发器: 2, update触发器: 3, delete触发器: 触 ...
- Oracle的基本语法,存储函数及触发器
1.PL/SQL PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能 力与过程语言的数据 ...
- Oracle打怪升级之路二【视图、序列、游标、索引、存储过程、触发器】
前言 在之前 <Oracle打怪升级之路一>中我们主要介绍了Oracle的基础和Oracle常用查询及函数,这篇文章作为补充,主要介绍Oracle的对象,视图.序列.同义词.索引等,以及P ...
- pt-online-schema-change中update触发器的bug
pt-online-schema-change在对表进行表结构变更时,会创建三个触发器. 如下文测试案例中的t2表,表结构如下: mysql> show create table t2\G . ...
- MySQL主从环境下存储过程,函数,触发器,事件的复制情况
下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
随机推荐
- Java实现常见的排序算法
一.排序算法 常见的排序算法主要分为下面几类: 选择排序 堆排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 桶式排序 基数排序 本文主要介绍选择排序.堆排序.冒泡排序.快速排序和归并排序的原理 ...
- R语言学习笔记——C#中如何使用R语言setwd()函数
在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...
- 【iOS】Interface Builder 预览
Interface Builder 为最顶层视图提供了 Simulated Metrics,预览用户界面的各种外观设置效果,例如顶部有导航栏或底部有标签栏的效果,如图所示:
- WPF滑块控件(Slider)的自定义样式
前言 每次开发滑块控件的样式都要花很久去读样式代码,感觉有点记不牢,所以特此备忘. 自定义滑块样式 首先创建项目,添加Slider控件. 然后获取Slider的Window样式,如下图操作. 然后弹出 ...
- Git 从master拉取代码创建新分支
从master拉取新分支并push到远端 开发过程中经常用到从master分支copy一个开发分支: 1.切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout m ...
- 浅谈设计模式及python实现
设计模式及Python实现 设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样你就能一次又一次地使用 ...
- .NET Core CSharp 中级篇 2-2 List,ArrayList和Dictionary
.NET Core CSharp 中级篇 2-2 本节内容为List,ArrayList,和Dictionary 简介 在此前的文章中我们学习了数组的使用,但是数组有一个很大的问题就是存储空间不足,我 ...
- 100天搞定机器学习|Day15 朴素贝叶斯
Day15,开始学习朴素贝叶斯,先了解一下贝爷,以示敬意. 托马斯·贝叶斯 (Thomas Bayes),英国神学家.数学家.数理统计学家和哲学家,1702年出生于英国伦敦,做过神甫:1742年成为英 ...
- 基于Spring框架应用的权限控制系统的研究和实现
摘 要: Spring框架是一个优秀的多层J2EE系统框架,Spring本身没有提供对系统的安全性支持.Acegi是基于Spring IOC 和 AOP机制实现的一个安全框架.本文探讨了Acegi安全 ...
- Docker:跨主机通信
修改主机docker默认的虚拟网段,然后在各自主机上分别把对方的docker网段加入到路由表中,配合iptables即可实现docker容器夸主机通信.配置方法如下: 设有三台虚拟机 v1: 10.1 ...