我有3张表显示在这张表中:
表A
A(
code1
.
.
.
)
表B
B(
code2
.
.
.
)
表C
C(
code3
.
.
.
)
我想在这个表的code1,code2,code3之间保持唯一
我如何接受oracle的目标?
关于这个问题,是否存在任何oracle语法?
答案 0 :(得分:1)
基于物化视图。
P.S。
代码未经过验证
我目前只能访问oracle XE 11gR2,因此我无法使用物化视图日志功能。
create table A (code int primary key);
create table B (code int primary key);
create table C (code int primary key);
create materialized view log on a with primary key;
create materialized view log on b with primary key;
create materialized view log on c with primary key;
create materialized view ABC_MV
refresh fast
as
select code from A
union all select code from B
union all select code from C
;
alter table ABC_MV add unique (code);
答案 1 :(得分:0)
你可以用触发器做到这一点。
CREATE OR REPLACE TRIGGER table1_check
BEFORE INSERT OR UPDATE ON table1
FOR EACH ROW
BEGIN
IF EXISTS (
SELECT attribute FROM table2
WHERE attribute = :NEW.attribute
) THEN
RAISE_APPLICATION_ERROR(-20001,
'Already exist in table2');
END IF;
END;
/
您可以修改它以检查更多表格。
答案 2 :(得分:-1)
使用第4张表
create table ABC (tab char(1) not null ,code int primary key, unique (tab,code));
create table A (tab char(1) as ('A') virtual not null,code int primary key,foreign key (tab,code) references ABC(tab,code));
create table B (tab char(1) as ('B') virtual not null,code int primary key,foreign key (tab,code) references ABC(tab,code));
create table C (tab char(1) as ('C') virtual not null,code int primary key,foreign key (tab,code) references ABC(tab,code));
insert into ABC (tab,code) values ('A',1);
insert into A (code) values (1);
insert into A (code) values (1);
[代码:1,SQL状态:23000] ORA-00001:违反了唯一约束(SYS.SYS_C0012834)
insert into B (code) values (1);
[代码:2291,SQL状态:23000] ORA-02291:完整性约束 (SYS.SYS_C0012839)违反了 - 未找到父密钥