sql >> Databáze >  >> RDS >> Oracle

Aktualizujte více hodnot sloupců tabulky pomocí jednoho dotazu

/** XXX CODING HORROR... */

V závislosti na vašich potřebách můžete použít aktualizovatelné zobrazení . Vytvoříte pohled na své základní tabulky a do tohoto pohledu přidáte spouštěč „namísto“ a aktualizujete pohled přímo.

Některé příklady tabulek:

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

... pak vytvořte aktualizovatelné zobrazení

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;
/

Nyní můžete aktualizovat pohled přímo...

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. Závislosti Oracle.DataAccess.Client

  2. 2 způsoby, jak zřetězit řetězec a číslo v Oracle

  3. Jak se zbavit chyby MySQL „Připravený příkaz je třeba znovu připravit“

  4. Odebrání databázového poštovního účtu z profilu (SSMS)