Oracle
 sql >> Baza danych >  >> RDS >> Oracle

UPSERT do tabeli z dynamiczną nazwą tabeli

MERGE działa doskonale z natywnym dynamicznym SQL (WYKONAJ NATYCHMIAST):

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; 

Czy możesz opublikować komunikat o błędzie, który pojawia się podczas korzystania z funkcji MERGE?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica dat Oracle, aby uzyskać liczbę lat

  2. Metoda gromadzenia:procedura DELETE w bazie danych Oracle

  3. Dlaczego nie mogę zmusić Oracle 11g do zużywania większej liczby procesorów dla pojedynczego zapytania SQL?

  4. 12c kolumny TOŻSAMOŚĆ

  5. GROUP BY bez funkcji agregującej