Oracle 10g: Suponha a seguinte tabela (T_REGISTER):
ID_PROCESS PERIOD CUSTOMER STATUS
===========================================
0001234 201801 12300344 INVALID
0001236 201801 12300344 INVALID
0001246 201801 12300344 UNPAID
0001249 201801 12300344 UNPAID
0001278 201801 12300344 COMPLETED
ID_PROCESS é o PK. Mas também preciso que (PERIOD + CUSTOMER + STATUS) seja único apenas quando o STATUS for CONCLUÍDO.
Em outras palavras, para um UNIQUE (PERIOD + CUSTOMER), não me importo em ter várias linhas INVALID ou UNPAID, mas só posso admitir uma única (PERIOD;CUSTOMER; STATUS="COMPLETED")
Alguma solução elegante usando CHECK CONSTRAINT antes de ir para a solução de gatilho? Desde já, obrigado...
As restrições de verificação não são para impor exclusividade. O índice exclusivo baseado em função pode fazer o trabalho (porque o Oracle aceita vários valores NULL em colunas exclusivas).