2014-10-02 93 views
0

我試圖創建一個約束來將外鍵添加到列。在約束內部,我嘗試使用IF語句來設置當我的表的列「Tipo」等於「E」或「e」時,那麼列id_cliente_fornecedor必須鏈接到表「Fornecedores」,否則,如果「Tipo」列等於「S」或「s」,則列id_cliente_fornecedor必須鏈接到表格客戶端。我可以在外鍵約束中使用IF語句嗎?

我已經在列「TIPO」設置允許值是唯一的「S」,「S」,「E」和「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

您正在使用什麼版本的Oracle? – 2014-10-02 00:55:17

+0

我正在使用oracle 11.2!感謝的人,它的工作... – 2014-10-02 03:33:03

回答

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); 
+0

在甲骨文,是不是由外鍵限制的空值? – RBarryYoung 2014-10-02 01:04:31

+2

@RBarryYoung。 。 。外鍵可以取NULL值。 – 2014-10-03 01:29:15

相關問題