表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
怎么加这个限制呢? 请大家帮我。
业务序号 业务小号
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
怎么加这个限制呢? 请大家帮我。
解决方案 »
- 什么是oracle客户端,什么事服务器端
- oracle9i如何导出表结构,而不导出表数据
- 使用rman,恢复的控制文件所包含的备份信息不全,导致恢复无法正常进行。 请指教!
- 请问以SYSOPER身份登录不能进行表和视图的查询吗?
- 求一个PL/SQL例子
- 在使用sql*loader时,中文乱码导致的一个错误,请教大家是否遇到过同样的问题
- 请问怎样将数字转化成日期????
- 在Oracle 中 float 与 number 类型的区别?
- 【求助】Oracle9i装了一半取消掉了,再装就装不上了
- which version Oracle support Pro*C .
- exp备份多表的一个问题
- 如何修改pl/sql连接oracle11的时间,最好是无限时间。
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' 执行过程中出错