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

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

  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. 【iOS】UITableViewDelegate 方法没有调用

    可能原因:没有调用 reloadData 方法. [self.tableView reloadData];

  2. Gunicorn-Django部署

    1. 简单部署 1. sudo pip3 install gunicorn 2. cd 到django项目中 sudo python3 manage.py migrate 3.启动服务:sudo py ...

  3. 对于HTTP过程中POST内容加密的解决方案

    0x00前言 前几天我师傅和我提及了这件事情 正常情况下 抓包过程中遇到加密情况会很迷茫 昨天把这个都弄了一下 也感谢大佬中间的指导 我一开始看到密码的类型下意识的是base64 但是去解密发现不对 ...

  4. 二、Markdown基本语法

    目录 2.1 标题 一级标题 二级标题 三级标题 2.2 加粗 2.3倾斜 2.4 高亮 2.5 上标 2.6 下标 2.7 代码引用(>式) 2.8 代码引用(```式) 2.9 代码引入(` ...

  5. Kubernetes容器集群管理环境 - Prometheus监控篇

    一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...

  6. git bash 初始化配置

    这里只针对 windows 下,使用git 时的一些初始配置 1. git bash 安装 下载地址: https://git-for-windows.github.io/ 根据提示,一步步安装即可 ...

  7. CentOS yum 源修改

    修改 CentOS 默认 yum 源为 mirrors.163.com 首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo [root@localhos ...

  8. CODING 告诉你如何建立一个 Scrum 团队

    原文地址:https://www.atlassian.com/agile/scrum/roles 翻译君:CODING 敏杰小王子 Scrum 当中有三个角色:PO(product owner),敏捷 ...

  9. hadoop开启Service Level Authorization 服务级认证-SIMPLE认证-过程中遇到的坑

    背景描述: 最近在进行安全扫描的时候,说hadoop存在漏洞,Hadoop 未授权访问[原理扫描],然后就参考官方文档及一些资料,在测试环境中进行了开启,中间就遇到了很多的坑,或者说自己没有想明白的问 ...

  10. C#之BackgroundWorker从简单入门到深入精通的用法总结

    需求分析 经常用到的耗时操作,例如: 1.文件下载和上载(包括点对点应用程序传输文件,从网络下载文件.图像等)2.数据库事务(从数据库读到大量的数据到WinForm界面中的DataGridview里呈 ...