sql >> Database >  >> RDS >> Oracle

UPSERT in tabel met dynamische tabelnaam

MERGE werkt prima met native dynamische SQL (IMMEDIATE UITVOEREN):

create table so_test(pk number not null primary key, value varchar2(20));

insert into so_test(pk, value) values(1, 'one');

declare
  l_SQL varchar2(4000);
  l_tablename varchar2(4000) default 'so_test';
begin
  l_SQL := 'merge into ' || l_tablename || ' target' ||
    ' using (select 1 pk, ''eins'' value from dual union all
             select 2 pk, ''zwei'' value from dual) source
      on (target.pk = source.pk)
      when matched then 
        update set target.value = source.value
      when not matched then
        insert values(source.pk, source.value)      
  ';
  dbms_output.put_line(l_sql);
  execute immediate l_SQL;
end; 

Zou je de foutmelding kunnen posten die je krijgt bij het gebruik van MERGE?



  1. Hoe de primaire sleutel van de MySQL-tabel automatisch te laten toenemen met een of ander voorvoegsel?

  2. Hoe kan ik een tabel vergrendelen bij lezen, met behulp van Entity Framework?

  3. Hoe de gemiddelde verkoop per dag te berekenen in MySQL

  4. Een OBJECT_NAME() ophalen uit een andere database in SQL Server