表A的字段
业务序号   业务小号
20090623    1
20090623    2
20090623    3
20090624    1
20090624    2
表B的字段
业务序号   业务小号
20090623    1 
   
现在要求表B的"业务小号"字段的取值必须在表A的业务序号相对应的范围内,
例如,当表B的业务序号为20090623时,其业务小号的值只能在1、2、3这3个值内(表A中业务序号20090623对应的业务小号只有这3个数),怎么对业务小号加上这个限制呢?用外键约束不行吧?表A的业务小号即不是主键也不unique  
怎么加这个限制呢? 请大家帮我。

解决方案 »

  1.   

    加一个trigger,怎么写楼主试试看。
      

  2.   

    create table tt_01(xh varchar2(20),bh int);
    create table tt_02(xh varchar2(20),bh int);insert into tt_01 values('20090623',    1 );
    insert into tt_01 values('20090623',    2 );
    insert into tt_01 values('20090623',    3 );
    insert into tt_01 values('20090624',    1 );
    insert into tt_01 values('20090624',    2 );
    create or replace trigger T_TT_02
    before insert or update on tt_02
    for each row
    declare
      icount int;
    begin
      select count(*) into icount 
      from tt_01 where :new.xh=xh and :new.bh=bh;
      if icount=0 then
      raise_application_error(-20002,'小号不存在');
      end if;
    end;SQL> insert into tt_02 values('20090624',2);已创建 1 行。SQL> commit;提交完成。SQL> insert into tt_02 values('20090624',3);
    insert into tt_02 values('20090624',3)
                *
    第 1 行出现错误:
    ORA-20002: 小号不存在
    ORA-06512: 在 "TEST01.T_TT_02", line 7
    ORA-04088: 触发器 'TEST01.T_TT_02' 执行过程中出错