Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zmień typ kolumny w tabeli

Potrzebujesz unikalnego indeksu opartego na funkcji :

create table tt (
  DealID number(10) primary key,
  LegID number(10),
  OrigID number(10),
  Description varchar2(200 char)
);
create unique index tt_leg_orig_dscr_uk on tt (
  case when description = 'A' then description end,
  case when description = 'A' then legid end,
  case when description = 'A' then origid end
);

insert into tt values (1, 1, 1, 'A');
1 row(s) inserted.

insert into tt values (2, 1, 1, 'A');
ORA-00001: unique constraint (XXXXX.TT_LEG_ORIG_DSCR_UK) violated

insert into tt values (2, 1, 2, 'A');
1 row(s) inserted.

select * from tt;
DEALID  LEGID   ORIGID  DESCRIPTION
-----------------------------------
    1       1        1           A
    2       1        2           A
2 rows returned in 0.01 seconds

insert into tt values (3, 1, 1, 'B');
1 row(s) inserted.

insert into tt values (4, 1, 1, 'B');
1 row(s) inserted.

select * from tt order by 1;

DEALID  LEGID   ORIGID  DESCRIPTION
-----------------------------------
     1      1        1           A
     2      1        2           A
     3      1        1           B
     4      1        1           B
4 rows returned in 0.01 seconds 

Jak widać, unikalny indeks działa tylko z rekordami z opisem ='A', pozwala mieć nieunikalne rekordy dla różnych opisów.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie listy funkcji i podpisu procedury od Oracle

  2. dane listygg do użytecznego formatu?

  3. Błąd DYLD_LIBRARY_PATH klienta natychmiastowego Oracle

  4. Pominąć zawartość polecenia SQLplus w systemie UNIX?

  5. Jak wykonać połączenie zewnętrzne na> 2 stołach (Oracle)