我可以在外键约束中使用IF语句吗?

时间:2014-10-02 00:42:58

标签: sql oracle constraints

我试图创建一个约束来向列中添加外键。在约束内部,我试图使用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;

任何人都可以帮助我吗?这可能吗?

1 个答案:

答案 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);