create table films (
film_id integer not null primary key,
title varchar2(100) not null,
uk_release_date date not null,
length_in_minutes integer not null,
bbfc_rating varchar2(10) not null,
insert_date date not null
)
Table created.
create table exceptions (
row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30)
)
Table created.
insert into films values (1, 'Frozen', date'2013-12-06', 102, 'PG', sysdate-2)
1 row(s) inserted.
insert into films values (2, 'Frozen', date'2013-12-06', 102, 'PG', sysdate-1)
1 row(s) inserted.
insert into films values (3, 'Frozen', date'2013-12-06', 100, 'U', sysdate)
1 row(s) inserted.
insert into films values (4, 'Aladdin', date'1993-11-18', 90, 'U', sysdate-2)
1 row(s) inserted.
insert into films values (5, 'Aladdin', date'1993-11-18', 90, 'U', sysdate-1)
1 row(s) inserted.
insert into films values (6, 'The Little Mermaid', date'1990-10-12', 83, 'U', sysdate)
1 row(s) inserted.
commit
Statement processed.
select *
from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
select title, uk_release_date, count(*)
from films
group by title, uk_release_date
having count(*) > 1
TITLE | UK_RELEASE_DATE | COUNT(*) | Aladdin | 18-NOV-93 | 2 | Frozen | 06-DEC-13 | 3 |
---|
select * from films
where (title, uk_release_date) in (
select title, uk_release_date
from films
group by title, uk_release_date
having count(*) > 1
)
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 |
---|
select f.*,
count(*) over (partition by title, uk_release_date) ct
from films f
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | CT | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 2 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 | 2 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 3 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 3 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 | 1 |
---|
select f.*
from films f
where count(*) over (partition by title, uk_release_date) > 1
ORA-00934: group function is not allowed hereMore Details: https://docs.oracle.com/error-help/db/ora-00934
select *
from (
select f.*,
count(*) over (partition by title, uk_release_date) ct
from films f
)
where ct > 1
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | CT | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 2 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 | 2 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 3 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 3 |
---|
with film_counts as (
select f.*, count(*) over (partition by title, uk_release_date) ct
from films f
)
select *
from film_counts
where ct > 1
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | CT | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 2 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 | 2 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 3 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 3 |
---|
delete films f
where insert_date not in (
select min(insert_date)
from films s
where f.title = s.title
and f.uk_release_date = s.uk_release_date
)
3 row(s) deleted.
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
rollback
Statement processed.
delete films
where film_id not in (
select min(film_id)
from films
group by title, uk_release_date
)
3 row(s) deleted.
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
rollback
Statement processed.
delete films
where rowid not in (
select min(rowid)
from films
group by title, uk_release_date
)
3 row(s) deleted.
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
rollback
Statement processed.
alter table films add constraint
film_u unique (title, uk_release_date)
ORA-02299: cannot validate (SQL_RFAHBKXKIBULIMTCPCVTMHRZA.FILM_U) - duplicate keys foundMore Details: https://docs.oracle.com/error-help/db/ora-02299
alter table films add constraint
film_u unique (title, uk_release_date) novalidate
ORA-02299: cannot validate (SQL_RFAHBKXKIBULIMTCPCVTMHRZA.FILM_U) - duplicate keys foundMore Details: https://docs.oracle.com/error-help/db/ora-02299
alter table films add constraint
film_u unique (title, uk_release_date)
using index (
create index film_i on films (title, uk_release_date)
) novalidate
Table created.
insert into films values (7, 'Frozen', date'2013-12-06', 102, 'PG', sysdate-1)
ORA-00001: unique constraint (SQL_RFAHBKXKIBULIMTCPCVTMHRZA.FILM_U) violatedMore Details: https://docs.oracle.com/error-help/db/ora-02299
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
alter table films modify constraint
film_u validate exceptions into exceptions
ORA-02299: cannot validate (SQL_RFAHBKXKIBULIMTCPCVTMHRZA.FILM_U) - duplicate keys foundMore Details: https://docs.oracle.com/error-help/db/ora-02299
select * from exceptions
ROW_ID | OWNER | TABLE_NAME | CONSTRAINT | AAAUuMAAXAAAADHAAC | SQL_RFAHBKXKIBULIMTCPCVTMHRZA | FILMS | FILM_U | AAAUuMAAXAAAADHAAB | SQL_RFAHBKXKIBULIMTCPCVTMHRZA | FILMS | FILM_U | AAAUuMAAXAAAADHAAA | SQL_RFAHBKXKIBULIMTCPCVTMHRZA | FILMS | FILM_U | AAAUuMAAXAAAADHAAE | SQL_RFAHBKXKIBULIMTCPCVTMHRZA | FILMS | FILM_U | AAAUuMAAXAAAADHAAD | SQL_RFAHBKXKIBULIMTCPCVTMHRZA | FILMS | FILM_U |
---|
select * from films
where rowid in (
select row_id from exceptions
where table_name = 'FILMS'
and constraint = 'FILM_U'
and owner = sys_context('userenv', 'current_user')
)
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 2 | Frozen | 06-DEC-13 | 102 | PG | 28-JAN-16 | 3 | Frozen | 06-DEC-13 | 100 | U | 29-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 5 | Aladdin | 18-NOV-93 | 90 | U | 28-JAN-16 |
---|
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
rollback
Statement processed.
delete films
where rowid in (
select row_id from exceptions
where table_name = 'FILMS'
and constraint = 'FILM_U'
and owner = sys_context('userenv', 'current_user')
)
and rowid not in (
select min(rowid)
from films
where rowid in (
select row_id from exceptions
where table_name = 'FILMS'
and constraint = 'FILM_U'
and owner = sys_context('userenv', 'current_user')
)
group by title, uk_release_date
having count(*) > 1
)
3 row(s) deleted.
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
insert /*+ ignore_row_on_dupkey_index (films(title, uk_release_date)) */ into films
values (7, 'Frozen', date'2013-12-06', 102, 'PG', sysdate)
ORA-38913: Index specified in the index hint is invalidMore Details: https://docs.oracle.com/error-help/db/ora-38913
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|
create unique index film_ui on films (title, uk_release_date) invisible
Index created.
alter table films drop constraint film_u
Table altered.
drop index film_i
Index dropped.
alter index film_ui visible
Statement processed.
alter table films add constraint film_u unique (title, uk_release_date) using index film_ui
Table altered.
insert /*+ ignore_row_on_dupkey_index (films(title, uk_release_date)) */ into films
values (7, 'Frozen', date'2013-12-06', 102, 'PG', sysdate)
0 row(s) inserted.
select * from films
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING | INSERT_DATE | 1 | Frozen | 06-DEC-13 | 102 | PG | 27-JAN-16 | 4 | Aladdin | 18-NOV-93 | 90 | U | 27-JAN-16 | 6 | The Little Mermaid | 12-OCT-90 | 83 | U | 29-JAN-16 |
---|