sql >> Databasteknik >  >> RDS >> Oracle

Uppdatera värden för flera tabellkolumner med en enda fråga

/** XXX CODING HORROR... */

Beroende på dina behov kan du använda en uppdaterbar vy . Du skapar en vy av dina bastabeller och lägger till en "istället för" utlösare till denna vy och du uppdaterar vyn direkt.

Några exempeltabeller:

create table party (
    party_id integer,
    employee_id integer
    );

create table party_name (
    party_id integer,
    first_name varchar2(120 char),
    last_name varchar2(120 char)
    );

insert into party values (1,1000);   
insert into party values (2,2000);
insert into party values (3,3000);

insert into party_name values (1,'Kipper','Family');
insert into party_name values (2,'Biff','Family');
insert into party_name values (3,'Chip','Family');

commit;

select * from party_v;

PARTY_ID    EMPLOYEE_ID    FIRST_NAME    LAST_NAME
1            1000           Kipper        Family
2            2000           Biff          Family
3            3000           Chip          Family

... skapa sedan en uppdateringsbar vy

create or replace view party_v
as
select
    p.party_id,
    p.employee_id,
    n.first_name,
    n.last_name
from
    party p left join party_name n on p.party_id = n.party_id;

create or replace trigger trg_party_update
instead of update on party_v 
for each row
declare
begin
--
    update party
    set
        party_id = :new.party_id,
        employee_id = :new.employee_id
    where
        party_id = :old.party_id;
--
    update party_name
    set
        party_id = :new.party_id,
        first_name = :new.first_name,
        last_name = :new.last_name
    where
        party_id = :old.party_id;
--
end;
/

Du kan nu uppdatera vyn direkt...

update party_v
set
    employee_id = 42,
    last_name = 'Oxford'
where
    party_id = 1;

select * from party_v;

PARTY_ID    EMPLOYEE_ID    FIRST_NAME    LAST_NAME
1            42             Kipper        Oxford
2            2000           Biff          Family
3            3000           Chip          Family


  1. 3 sätt att kontrollera en kolumns datatyp i PostgreSQL

  2. SQL Server:konvertera ((int)år,(int)månad,(int)dag) till Datetime

  3. Hämta delsträng i SQL Server

  4. För sista gången, NEJ, du kan inte lita på IDENT_CURRENT()