2014-10-02 3 views
0

제약 조건을 만들어 열에 외래 키를 추가하려고합니다. 제약 조건 내 테이블의 "Tipo"열이 'E'또는 'e'와 같을 때 id_cliente_fornecedor 열이 테이블 "Fornecedores"또는 다른 것으로 연결되어야 할 때이를 설정하기 위해 IF 문을 사용하려고합니다. "Tipo"열이 'S'또는 's'와 같은 경우 열 id_cliente_fornecedor가 테이블 클라이언트에 연결되어야합니다.외래 키 제약 조건에서 IF 문을 사용할 수 있습니까?

'S', 'S', 'E'및 'e'만 허용되는 값을 설정하려면 "Tipo"열에 Check 제약 조건이 이미 있습니다.

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

어떤 오라클 버전을 사용하고 있습니까? –

+0

oracle 11.2를 사용 중입니다! 고마워, 그게 효과가있어 ... –

답변

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

oracle에서 nulls가 외래 키에 의해 제약받지 않습니까? – RBarryYoung

+2

@RBarryYoung. . . 외래 키는 'NULL'값을 가질 수 있습니다. –