Oracle触发器不能读取表的问题

问题描述

Oracle触发器不能读取表的问题

12、假设有这样一张用户表表结构如下:UserInfo(id ,username,userPass),希望向表中增加数据时,表中id列的数字自动生成。(选做)
1)第一步创建序列,要求开始的数字为1,每次递增1,按顺序产生序列值;
2)第二步创建一个触发器,向用户表中插入数据的时候触发触发器,在触发器内部调用序列并生成一个序列值赋值给表的id列。

触发器:

 create or replace trigger pro_id
  after insert on userinfo
  for each row
begin
  update userinfo set id=seq_id.nextval where username=:new.username;
end;

执行该语句时出错:

 insert into userinfo(username, userpass) values('李四',123456);

在行 1 上开始执行命令时出错:
insert into userinfo(username, userpass) values('李四',123456)
错误报告:
SQL 错误: ORA-04091: 表 SCOTT.USERINFO 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SCOTT.PRO_ID", line 2
ORA-04088: 触发器 'SCOTT.PRO_ID' 执行过程中出错
04091. 00000 - "table %s.%s is mutating, trigger/function may not see it"
*Cause: A trigger (or a user defined plsql function that is referenced in
this statement) attempted to look at (or modify) a table that was
in the middle of being modified by the statement which fired it.
*Action: Rewrite the trigger (or function) so it does not read that table.

请问哪里出错了?

解决方案

ORACLE 触发器问题

时间: 2024-11-08 18:57:28

Oracle触发器不能读取表的问题的相关文章

oracle 触发器。当表中期中成绩字段或期末成绩字段任一个改变时 总成绩随之改变。

问题描述 已有表examscore 表中总成绩应该等于期中成绩与期末成绩之和.现在希望写一个触发器 在期中成绩或期末成绩改变时 总成绩随之改变------------------------------------表描述如下:--------------------------------------表中数据:--------------------------------------自己乱写的代码,出错:DECLARE PRAGMA AUTONOMOUS_TRANSACTIO;create o

oracle-新人求教ORACLE 触发器的问题

问题描述 新人求教ORACLE 触发器的问题 表1为映射表,存在A1和B1两个字段,要求在表2插入数据时,数据中的A2(A2=A1)根据表1变为对应的b1,这个触发器改如何写 解决方案 在表2的触发器里写,写一个before触发器 select B1 into :new.A2 from 表1 where A1 = :new.A2; 即可

Oracle Database 10g:删除表

oracle 使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表 以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 - 当然是意外地删除 - 并需要尽快地恢复.(在某些时候,这个不幸的用户可能就是 DBA!) Oracle9i Database 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作.唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据

Oracle触发器的用法

1.定义 触发器:与表或数据库事件联系在一起,当一个触发器事件发生时,定义在表上的触发器被触发执 行. 触发器触发次序 1)执行 BEFORE语句级触发器; 2)对与受语句影响的每一行: · 执行 BEFORE行级触发器 · 执行 DML语句 · 执行 AFTER行级触发器 3)执行 AFTER语句级触发器 2.DML触发器 触发类型--行级和表级 行级:触发语句处理每一行时,行级别触发器都激发一次. 通过:old访问原始值.:new访问修改后的值,:old和:new只在触发器内部有效. 触发时

oracle触发器如何使用

  触发器 是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们.触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 1.说明 1)触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用 2)触发器分类: 1.DML触发器: 创建在表上,由DML事件引发 2.instead of触发器: 创建在视图上并且只能在行级上触发,用于替代insert,delet

Oracle触发器简单实现

[oracle]触发器简单实现   目标:实现实时备份uertest表数据至usertest_temp中,两表结构一致 解决:用oracle触发器实现同步   结果:   1.建表   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [sql] -- 简单的用户表  create table USERTEST  (    NAME     VARCHAR2(20) not null,    AGE      NUMBER,    ISDELETE VARCHAR2(4

MySQL、SQL Server 和 Oracle 触发器的创建

场景:当 users 表在 insert,update,delete 时,在 users_log 表中记录变更的 id MySQL触发器的创建 触发时机:BEFORE,AFTER 触发事件:INSERT,UPDATE,DELETE NEW 和 OLD 关键字: | action | NEW | OLD | |--------|----------------|----------------| | insert | 插入的新数据 | 无 | | update | 修改为的新数据 | 被修改的原数

oracle怎么导出一个表结构到excel,包括字段,注释,长度等

问题描述 oracle怎么导出一个表结构到excel,包括字段,注释,长度等 写一个数据库文档,以方便日后 好查看数据库结构维护 解决方案 使用PL/SQL登录,右键点击需要导出表结构的表,选择查看,在对话框选择列,按图来做就OK了 解决方案二: oracle 怎么读取表结构和注释,生成数据库结构文档 解决方案三: 用Navicat啊 批量导出,导出格式可以选 解决方案四: plsql中有一个跟跟柱状图一样的按钮,里面有一个选项,可以直接导出来 解决方案五: plsql中有一个跟跟柱状图一样的按

oracle触发器定时执行

问题描述 oracle触发器定时执行 请高手帮忙写一个触发器,当表中插入数据时,一段时间后(3分钟或者5分钟)自动 修改表中最新数据(有插入时间字段)的某个字段为false或者为1: 解决方案 等我回实验室,现在在上课 解决方案二: 在Oracle的触发器中执行DDL语句oracle 一个表上的多个触发器的执行顺序 解决方案三: 触发器是针对表格中有数据新增修改和删除时触发的程序,那只是一瞬间的事情,oracle有一个dbms_lock.sleep(10);休眠功能, 但是如果一次性新增了100