今天做了一个需要用到触发器实现的功能中间去到了各种问题,还好最后都解决了;

整个过程中真是遇到了不少错误:

  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 触发器的更多相关文章

  1. oralce触发器

    n  触发器的分类 DML(insert,delete,update)触发器 DDL(create table ,create view...drop...)触发器 系统触发器(与系统相关的触发器,比 ...

  2. oralce系统触发器

    系统事件是指基于oracle事件(例如logon.logoff和startup.shutdown)所建立的触发器,通过使用系统事件触发器,提供了跟踪系统或是数据库变化机制.下面介绍使用的系统事件属性函 ...

  3. oralce 存储过程、函数和触发器

    一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数.   创建存储过程 用CREATE PROCEDURE命令建立存储过程. 语法: create [or repl ...

  4. oracle的触发器

    oracle的触发器分为语句级和行级两种类型,在视图上所创建的触发器叫做什么类型的触发器? DML触发器有三类: 1, insert触发器: 2, update触发器: 3, delete触发器: 触 ...

  5. Oracle的基本语法,存储函数及触发器

    1.PL/SQL    PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能  力与过程语言的数据 ...

  6. Oracle打怪升级之路二【视图、序列、游标、索引、存储过程、触发器】

    前言 在之前 <Oracle打怪升级之路一>中我们主要介绍了Oracle的基础和Oracle常用查询及函数,这篇文章作为补充,主要介绍Oracle的对象,视图.序列.同义词.索引等,以及P ...

  7. pt-online-schema-change中update触发器的bug

    pt-online-schema-change在对表进行表结构变更时,会创建三个触发器. 如下文测试案例中的t2表,表结构如下: mysql> show create table t2\G . ...

  8. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  9. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

随机推荐

  1. SSD+HDD 安装ubuntu16.04+win7双系统

    本人电脑是联想天逸100  前段时间把光驱拆了加了一个128G的SSD 顺便把SSD装上了win7  机械硬盘500G放资料和一般软件之类的   后来想要用到ubuntu  就在官网下载ubuntu1 ...

  2. Code blocks返回错误代码:Process returned -1073741819 (0xC0000005)

    循环语句访问链表时,返回了错误代码: 逐项排查后,发现是由while循环引起的: 附上出错代码: do{ L=L->post; printf("%05d %d %05d\n" ...

  3. Apache之——多虚拟主机多站点配置的两种实现方案

    Apache中配置多主机多站点,可以通过两种方式实现: 将同一个域名的不同端口映射到不同的虚拟主机,不同端口映射到不同的站点: 将同一个端口映射成不同的域名,不同的域名映射到不同的站点. 我们只需要修 ...

  4. php 获取未来七天的日期和星期

    php获取未来七天的日期和星期代码     for($i=4;$i<8;$i++){       $dateArray[$i]=date('Y-m-d',strtotime(date('Y-m- ...

  5. NOIP 2018旅行题解

    从佳木斯回来刷一刷去年没A的题 题目描述 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 nn 个城市之间有 mm 条双向道路.每条双向道路连接两个 ...

  6. Spark 系列(四)—— RDD常用算子详解

    一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...

  7. node 删除和复制文件或文件夹

    [toc] 创建时间:2019-08-12 注意:在win10,v10.16.1 环境运行无问题 首先引入相关包(会在使用处具体说明): const fs = require('fs') const ...

  8. SonarQube系列一、Linux安装与部署

    [前言] 随着项目团队规模日益壮大,项目代码量也越来越多.且不说团队成员编码水平层次不齐,即便是老手,也难免因为代码量的增加和任务的繁重而忽略代码的质量,最终的问题便是bug的增多和代码债务的堆积.因 ...

  9. Switch分销技术解读

    Switch分销技术解读 来源:环球旅讯|2009-03-13 当Switch在海外成熟运作近40年后,该业务终于进入中国市场.但对于中国业者来说,知道Switch的人很少,了解Switch的人更少. ...

  10. getpost请求案例

    public class MainActivity extends AppCompatActivity { private ListView lv; @Override protected void ...