create table table_name1(id varchar2(40),bm varchar2(20),mc varchar2(20));
create table table_name2(id varchar2(40),编码 varchar2(20),名称 varchar2(20));create table 数据传输日志( id varchar2(36),op_date date,table_name varchar2(40),c_sqlcode number(18),c_sqlerror varchar2(255),tab_id varchar2(255) )create or replace trigger tr_insert
  before insert on table_name1  
  for each row
declare
 ls_sqlerror varchar2(500);
  li_code number(18);
  -- local variables here
begin
  Insert Into table_name2( ID,编码,名称) Values (:New.id,:New.bm,:New.mc );
        exception
   when others then 
      ls_sqlerror := sqlerrm;
      li_code := sqlcode;
      insert into 数据传输日志(id,op_date,TABLE_NAME,c_SQLCODE,C_SQLERROR,tab_id) 
      values (:new.id,sysdate,'zlxmfl',li_code,ls_sqlerror,:new.id);
end tr_insert;
我在pB里面用的 datawindow 100条提交一次,但是我再table_name2 表里面只能找到一条数据。在数据传输日志里面找到了99条数据,其中c_sqlerror都是  违反唯一约束性。
  请问这个是为什么呢?

解决方案 »

  1.   

    table_name2 id字段有唯一索引?pB里面用的 datawindow 100条提交一次。插入table_name1里的id值,是否自动改变,比如取sequence.nextval
      

  2.   

    都是自动变化。 id 都是唯一值。都建了唯一索引的 取的是 sys_guid() 而且在 table_name1中我也查了数据的 id都不相同。
      

  3.   

    我觉得 应该不是的。PB代码主要是往table_name1中写入数据, 而且table_Name1 中的数据没有任何问题。只是在往table_name2 中写入数据才出的问题。
      

  4.   

    想了想,你是批量提交的数据,你的触发器却是行触发器,是性能造成的问题?刚查了下官方的信息,还是不能确定问题所在,继续
    http://www.oracle.com/technology/global/cn/pub/articles/oracle-database-11g-top-features/11g-efficient-coding.html