create table planets (
id integer primary key,
name varchar(256),
faction varchar2(10)
)
Table created.
insert into planets values ( 1, 'Korriban', 'imperium')
1 row(s) inserted.
insert into planets values ( 2, 'Dromund Kaas', 'imperium')
1 row(s) inserted.
insert into planets values ( 3, 'Hoth', 'republic')
1 row(s) inserted.
create table garrisons (
id integer primary key,
fk_planet integer not null,
constraint garrisons_fk_planet foreign key ( fk_planet )
references planets( id )
)
Table created.
insert into garrisons values ( 1, 1 )
1 row(s) inserted.
insert into garrisons values ( 2, 1 )
1 row(s) inserted.
insert into garrisons values ( 3, 2 )
1 row(s) inserted.
insert into garrisons values ( 4, 3 )
1 row(s) inserted.
alter table garrisons
add name varchar2(300)
Table altered.
select
garrisons.id garrison_id,
planets.name planet_name
from
garrisons
inner join planets
on garrisons.fk_planet = planets.id
where
planets.faction = 'imperium'
GARRISON_ID | PLANET_NAME | 1 | Korriban | 2 | Korriban | 3 | Dromund Kaas |
---|
begin
for rec in (select
garrisons.id,
planets.name
from
garrisons
inner join planets
on garrisons.fk_planet = planets.id
where
planets.faction = 'imperium'
)
loop
update garrisons
set name = rec.name || ' (' || to_char(rec.id) || ')'
where id = rec.id;
end loop;
end;
Statement processed.
select * from garrisons
ID | FK_PLANET | NAME | 1 | 1 | Korriban (1) | 2 | 1 | Korriban (2) | 3 | 2 | Dromund Kaas (3) | 4 | 3 | - |
---|
rollback
Statement processed.
update garrisons
set name = (
select
planets.name || ' (' || to_char(garrisons.id) || ')'
from planets
where planets.id = garrisons.fk_planet
)
where exists ( -- Limitation to Imperium
select 1 from planets
where planets.id = garrisons.fk_planet
and planets.faction = 'imperium'
)
3 row(s) updated.
select * from garrisons
ID | FK_PLANET | NAME | 1 | 1 | Korriban (1) | 2 | 1 | Korriban (2) | 3 | 2 | Dromund Kaas (3) | 4 | 3 | - |
---|
rollback
Statement processed.
merge into garrisons target
using (
select
garrisons.id,
planets.name
from
garrisons
inner join planets
on garrisons.fk_planet = planets.id
where
planets.faction = 'imperium'
) source
on (target.id = source.id)
when matched then
update set
target.name = source.name || ' (' || to_char(source.id) || ')'
Statement processed.
select * from garrisons
ID | FK_PLANET | NAME | 1 | 1 | Korriban (1) | 2 | 1 | Korriban (2) | 3 | 2 | Dromund Kaas (3) | 4 | 3 | - |
---|
rollback
Statement processed.
update (
select
garrisons.id,
garrisons.name garrison_name,
planets.name planet_name
from
garrisons
inner join planets
on garrisons.fk_planet = planets.id
where
planets.faction = 'imperium'
)
set garrison_name = planet_name || ' (' || to_char(id) || ')'
3 row(s) updated.
select * from garrisons
ID | FK_PLANET | NAME | 1 | 1 | Korriban (1) | 2 | 1 | Korriban (2) | 3 | 2 | Dromund Kaas (3) | 4 | 3 | - |
---|
rollback
Statement processed.