Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Motta

Unique key com function

Recommended Posts

Tenho a seguinte situacao (simplificando)

 

tabela

 

debitos

--------

nosso_numero number pk (sequence)

cod_cliente number

mes_ref date

situacao number

 

 

mes_ref é sempre dia 01 (sem hora)

situacao pode ser : 1 aberto 3 pago 5 recalculado

 

Queria uma constraint que pudesse garantir

só ter um registro em debitos (1 aberto ou 3 pago) e recalculados sem limite

 

tentei :

 

 

ALTER TABLE DEBITOS
  ADD CONSTRAINT XUK_SITUACAO UNIQUE (
	cod_cliente,
	MES_REF,
	(case when situacao = 1 then 1
		  when situacao = 3 then 1
		  else nosso_numero 
	 end) 
  )
/

com decode tb não foi, há algum jeito ??

 

Em resumo : é possível criar uma unique constraint com function ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

utilize a constraint CHECK, ele irá realizar o serviço de fazer a correção dos dados das colunas, exemplo:

 

SQL > alter table OWNER.TABELA add constraint CHECK_VALOR check (coluna=1 or coluna=2);

Irá irá filtrar os dados que irá entrar na sua coluna, cheque se a síntaxe está correta, fiz de cabeça.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, Rogrigo não era bem isto , até vi uma solução mas como já tem registros não unicos dentro da condição não posso usar mais a unique.

 

De qq forma valeu !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Queria uma regra do tipo :

 

Só pode haver um boleto ativo (1-aberto,2-pago) por mês e qts cancelados houver (3)

 

debitos

--------

nosso_numero number pk (sequence)

cod_cliente number

mes_ref date

situacao number

 

consegui fazer (usando case num index unico) , mas como a tabela já estava bichada de outros carnavais , não consegui criar (a sintaxe) funcionou, fiz uma trigger de before insert e resolveu.

 

valeu !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.