这应该是在程序中解决的问题
可以先SELECT一下,或者用一个存储过程来判断

解决方案 »

  1.   

    try
    after insert or update...
      

  2.   

    当触发器为each row状态,在Update的时候是不能select 本表的,insert就可以
      

  3.   

    to bzszp(SongZip) : 试过 after ,也不行to comcn(大XX): 我是考虑为了简化前端程序才做成trigger的.
      

  4.   

    to etheltim(etheltim): 如果update时候不能select本表,有没有替代方法?
      

  5.   

    写个存储过程,让前端调用吧,这样要简单可靠一些,常见的也是用这种方法
    不然,你的TRIGGER失效了怎么办
      

  6.   

    update的话,在触发器好象没办法实现哦
      

  7.   

    赞成  comcn(大XX) 
    或者把判断放到前端
      

  8.   

    我用了一个N土的办法解决了问题,但是觉得太土,实在不爽,究竟是Oracle太笨还是我太笨?有没有好的办法,高手们帮忙想点办法啊!create or replace trigger TG_CheckPropCapTypeName after insert or update on TB_NetworkPropType
    declare
    nCount int;
    begin
    select max(nCount1) into nCount from (select count(*) as nCount1 from TB_NetworkPropType group by nNetworkTypeID,UPPER(sName));
        if (nCount > 1)
        then 
          RAISE_APPLICATION_ERROR(-20000, '属性或技术指标不允许重名');
        end if;
    end;    
      

  9.   

    刚才又把代码优化了一下,不过还是N土:create or replace trigger TG_CheckPropCapTypeName after insert or update on TB_NetworkPropType
    declare
    nCount int;
    begin
        select max(count(*)) into nCount from TB_NetworkPropType group by nNetworkTypeID,UPPER(sName);
        if (nCount > 1)
        then 
    RAISE_APPLICATION_ERROR(-20000, '属性或技术指标不允许重名');
        end if;
    end;    
      

  10.   

    可以先插入或修改,然后删除表中重复项
    delete from TB_NetworkPropType  a where  a.rowid !=( select max(rowid) 
                   from a b where a.nNetworkTypeID =b.nNetworkTypeID  and a.sName=b.sName);