我试图创建一个约束来向列中添加外键。在约束内部,我试图使用IF语句来设置当列" Tipo"我的桌子等于“E'或者' e'那么列id_cliente_fornecedor必须链接到表" Fornecedores"或者,如果列" Tipo"等于' S'或者' s',列id_cliente_fornecedor必须链接到表客户。
我已经对列进行了检查约束" Tipo"将允许值设置为仅为' S''' E'和';
alter table francisco.movimentacao
add constraint fk_clifor
FOREIGN KEY (id_cliente_fornecedor)
references begin
if((movimentacao.tipo = 'E') or (movimentacao.tipo = 'e')) then
francisco.fornecedores(id)
else
francisco.clientes(id)
end;
任何人都可以帮助我吗?这可能吗?
答案 0 :(得分:2)
在Oracle 11g +中,您可以使用虚拟列执行此操作。
alter table francisco.movimentacao
add key_e as (case when tip in ('E', 'e') then id_cliente_fornecedor end);
alter table francisco.movimentacao
add key_x as (case when tip not in ('E', 'e') then id_cliente_fornecedor end);
alter table francisco.movimentacao
add constraint fk_key_e foreign key (key_e) references francisco.fornecedores(id);
alter table francisco.movimentacao
add constraint fk_key_x foreign key (key_x) references francisco.clientes(id);