sql >> Database teknologi >  >> RDS >> Oracle

Opdater flere tabelkolonneværdier ved hjælp af en enkelt forespørgsel

/** XXX CODING HORROR... */

Afhængigt af dine behov kan du bruge en opdaterbar visning . Du opretter en visning af dine basistabeller og tilføjer en "i stedet for" trigger til denne visning, og du opdaterer visningen direkte.

Nogle eksempler på tabeller:

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

... opret derefter en opdatering, der kan opdateres

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 opdatere visningen direkte...

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. SQL Server 2005 Hvordan opretter man en unik begrænsning?

  2. Installer icu4c version 63 med Homebrew

  3. Dobbelt kolon (::) notation i SQL

  4. Entity Framework kerne - Indeholder er der forskel på store og små bogstaver eller ufølsom?