CREATE OR REPLACE TRIGGER test
BEFORE INSERT or update ON sdr FOR EACH ROW 
BEGIN 
    SELECT qh INTO :NEW.qh FROM "abc"  WHERE dq=:NEW.dq;
END;这样建立了触发器,但在添加表sdr中数据的时候,如果在表abc中没有相应信息的话就会出错.表abc中数据
dq       qh
深圳     0755
...
如果我在表sdr中添加dq=合肥,表abc中未有合肥的区号,就出错了.请问怎么建立一个如果表abc中没有的话就用其它的代替或者空着,不要报错就行了.因为是向表sdr中导入数据.如果出错就停止导入了.

解决方案 »

  1.   

    begin
    select decode(qh,'合肥',’合肥‘,'想写什么就是什么啦') into :new.qh 
    from 'abc
    where dq=:new.dq;
    end;
      

  2.   

    SELECT count(*) num FROM "abc"  WHERE dq=:NEW.dq;
    if num > 0 then 
       SELECT qh INTO :NEW.qh FROM "abc"  WHERE dq=:NEW.dq;
      

  3.   

    CREATE OR REPLACE TRIGGER test
    BEFORE INSERT or update ON sdr FOR EACH ROW 
    BEGIN 
    SELECT qh INTO :NEW.qh FROM "abc"  WHERE dq=:NEW.dq;
    exception
    when others then
    :new.qh:=null;
    END;
    /
      

  4.   

    CREATE OR REPLACE TRIGGER TRI_TEST
      BEFORE INSERT or update ON sdr FOR EACH ROW 
    DECLARE
      i_rec INT;
    BEGIN 
      select count(1) into i_rec
        from abc"  WHERE dq=:NEW.dq;
      IF i_rec=1 THEN
        SELECT qh INTO :NEW.qh FROM "abc"  WHERE dq=:NEW.dq;
      END IF;
    exception
    when others then
      NULL;
    END;
    /
      

  5.   

    beckhambobo(beckham) 的效率高一些,建议你使用这个方法。
      

  6.   

    CREATE OR REPLACE TRIGGER test
    BEFORE INSERT or update ON sdr FOR EACH ROW 
    BEGIN 
    SELECT qh INTO :NEW.qh FROM "abc"  WHERE dq=:NEW.dq;
    exception
    when others then
    :new.qh:=null;
    END;
    /
      

  7.   

    同意 yangyn(男儿当自强) 的写法,最好还做一个i_rec<>1的处理:
    IF i_rec=1 THEN
        SELECT qh INTO :NEW.qh FROM "abc"  WHERE dq=:NEW.dq;
    ELSE
        :NEW.qh:=null;
    END IF;