表 XXX 发生了变化 触发器不能读它

1、创建触发器:

--倘若同一个业务的某种规则黄牌的置牌时间小于预警的置牌时间,
--则交换他们的置牌时间。
create or replace trigger after_punish_update_time
  after insert  on winf_sv_punish
  for each row
declare
  param_id  varchar2(100);--置牌ID
  param_breakRule  varchar2(100);--违反规则
  param_punishResult  varchar2(2);--置牌结果(预警,异常,黄牌,红牌)
  param_sblsh  varchar2(100);--申办流水号
  param_yuJingPunishId  varchar2(2);--置牌预警的ID
  param_smallDate  date;--预警的置牌时间
  param_bigDate  date;--黄牌的置牌时间  
begin
  param_id:=:new.id;
  param_breakRule:=:new.break_rule;
  param_punishResult:=:new.punish_result;
  param_sblsh:=:new.sblsh;
  param_bigDate:=:new.break_time;
  --查询出该业务的某个规则的预警ID,预警置牌时间
  select p.id,p.break_time into param_yuJingPunishId,param_smallDate from winf_sv_punish p where p.break_rule =(
  select r.id  from winf_sv_rule  r
  left join winf_sv_supervisepoint sp on r.supervise_point=SP.ID
  where r.supervise_point=(
  select r.supervise_point from winf_sv_rule r where r.id=param_breakRule
  ) and r.rule_punish=‘1‘) and p.sblsh=param_sblsh and p.punish_result=‘1‘;
--规则置牌结果为黄牌
  if  param_punishResult=‘2‘ and param_bigDate<param_smallDate  then
--定义游标查出该部门的核查负责人,若有则发送(状态为0),没有则暂存到待交办任务中(状态为-1)
  dbms_output.put_line(‘申办流水号:‘||param_sblsh||‘黄牌ID‘||param_id||‘预警ID‘||param_yuJingPunishId);

--交换置牌时间
   update winf_sv_punish  p1 set p1.break_time=param_smallDate where p1.id=param_id;
   update winf_sv_punish  p2 set p2.break_time=param_bigDate where p2.id=param_yuJingPunishId;
end if;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN null;
end after_punish_update_time;

2、执行测试语句,报错:

-- Created on 2014/10/16 by LAIWENHUA
declare
  -- Local variables here
  i integer;
begin
  -- Test statements here
   insert into WINF_SV_PUNISH
   (id,
    BREAK_RULE,
    BREAK_TIME,
    SBLSH,
    PUNISH_LEVEL,
    PUNISH_RESULT,
    OPERATE_TYPE,
    PUNISH_USERID,
    PUNISH_EXPLAIN,
    ISHANDLE,
    punish_type,
    NODE_ID,
    send_status,
    send_lead_status,
    IS_CONFIRM,
    CONFIRM_TIME)
 values
   (‘81af91db3c1b49a6a0f62b522275007a‘,
    ‘2f105e0797f84ea5b0cceb6a3f43b7fa‘,
    to_date(‘2014-10-16 23:07:50‘, ‘yyyy-mm-dd hh24:mi:ss‘),
    ‘YC-20141011009‘,
    ‘1‘,
    ‘2‘,
    ‘2‘,
    ‘3d12f197c5a04f2a8617d591acbf6ea9‘,
    ‘您所负责的业务申请歇业烟草专卖零售许可证,‘,
    ‘2‘,
    ‘1‘,
    ‘E939179C76C74BE5B29ECA958A3CD67E‘,
    ‘2‘,
    ‘2‘,
    ‘1‘,
    to_date(‘2014-10-16 23:07:50‘, ‘yyyy-mm-dd hh24:mi:ss‘));
--(String)
end;

3、解决方法:加上自治事务即可。

在declare后加上PRAGMA AUTONOMOUS_TRANSACTION;

时间: 2025-01-16 07:22:56

表 XXX 发生了变化 触发器不能读它的相关文章

ORA-04091: 表 发生了变化, 触发器/函数不能读它

触发器中新调用了一个存储过程. 触发器: create or replace trigger tr_credits_wzclorder_clwzjk after update on app_wzclorder for each row declare ... begin ... p_integral_ticket_refund(:new.ordernumber,:new.userid); ... end; 存储过程: create or replace procedure p_integral_

2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案

1.异常出现的场景. :在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器.将表中的数据读入到其他表中. SQL语句如下: drop table tr_table;         create table tr_table(  --触发器作用表       tab_id number primary key,       tab_name varchar2(30) NOT NULL      )         create tabl

sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束&quot;XXX&quot;冲突。该冲突发生于数据库&quot;XXX&quot;,表&quot;XXX&quot;, column &#39;XXX)

使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 3 where f.parent_object_id=object_id('表名') 执行如下SQL语句删除即可. 1 alter table 表名 drop constraint 外键约束名 sql数据库删除表的外键约束(INSERT 语句与 F

当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。

在创建事务复制时,很多时候不一定使用快照进行初始化,而是使用备份还原初始化.当对有标识列(即identity的自增列)的表进行复制的时候,使用备份还原初始化搭建起来的复制常常就会报错,即:当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值.这个错误是当创建表的时候,有一项’标识规范‘中的’不用于复制‘默认为‘否’,当发布端插入数据时导致,右键表,选择设计选项,如图 当使用备份还原进行初始化,订阅端的这张表该选项也是‘否’,因此就会报错.在不删除此复制的

监听表单中的内容变化

一.总结: 今天项目中要给表单控件添加搜索选择的效果,如下: 红框圈住的表单被点击之后,弹出如下框: 然后根据用户的搜索条件要显示查询结果供用户选择. 总结如何监听表单中的内容变化: 方法一: 1. 实现代码: 上面的代码实现出来的效果(类似百度搜索框)是,当用户在搜索框中输入查询条件,每当搜索框中的内容改变就会触发监听事件,并向服务器发送请求,搜索框下方相应的就显示查询到的结果.每次在将查询到的结果设置在界面之前都将前一次查询显示的数据从界面上remove掉,用这个方法来解决界面显示多条重复数

js监听input等表单输入框的变化事件oninput

js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变化的,复制粘贴也不能监听到,于是就用到了oninput事件来监听文本框value值的改变.由于是手机端页面没有考虑IE 这货.过去一般都使用onchange/onkeyup/onkeypress/onkeydown实现,但是这存在着一些不好的用户体验.比如onchange事件只在键盘或者鼠标操作改变

Cnblogs 的 MetaWeblog 的接口发生了变化

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami

navicat查看mysql数据表记录数不断变化

在使用navicat进行数据库管理的时候,在查看表对象的时候会发现,每次刷新,数据表的记录数不断变化,尤其是大表. 对于100万的数据经常会显示九十几万,当然通过count(*)出来的数据是正确的. 非常疑惑,查了一下资料,原来和存储引擎有关.官方说明: The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB

angular+ 关于form表单监听变化

// 如果使用表单 loopholeForm: FormGroup; constructor( fb: FormBuilder, private modalRef: NzModalRef, private message: NzMessageService, private cveService: CveService ) { this.loopholeForm = fb.group({ loophole: [null], cveName: [null], cnnvdName: [null],