Oracle
 sql >> база данни >  >> RDS >> Oracle

UPSERT в таблица с име на динамична таблица

MERGE работи перфектно с роден динамичен SQL (ИЗПЪЛНЕНИЕ НЕЗАБАВНО):

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; 

Бихте ли публикували съобщението за грешка, което получавате, когато използвате 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. Oracle:SQL заявка за намиране на всички тригери, принадлежащи към таблиците?

  2. Oracle 12.2 Sharding

  3. row num не показва никакви редове при използване на ключова дума между

  4. Как да покажа грешки в sqlplus

  5. СЪЗДАЙТЕ Oracle процедура