2016-05-09 6 views
0

У меня есть приложение, которое использует массовую вставку для размещения данных в таблице базы данных Oracle. Теперь мне нужно изменить его, так что он его поддерживает, но с трудом найти лучшее решение для этого. Все сайты предлагают использовать MERGE для вставки/обновления строк, поскольку это наиболее эффективное и простое решение, но все примеры основаны на данных, которые уже находятся в таблице.Лучший способ для повышения внешнего приложения

Что было бы лучшим решением для этого изменения? Используется ли какая-то временная или промежуточная таблица, или есть способ пропустить это?

+0

«примеры базы данных, которые уже находится в таблице "- вы можете смотреть на плохие примеры, [merge позволит вам вставлять/обновлять по мере необходимости] (http://stackoverflow.com/questions/237327/oracle-how-to-upsert-update- или-вставка-в-а-таблица) – Dariusz

ответ

2

MERGE может использоваться с постоянными значениями.

Однако из-за отсутствия в Oracle поддержки конструктора values() строки это становится немного уродливый:

merge into the_table 
using (
    select 1 as id, 'arthur' as name from dual 
) t on (t.id = the_table.id) 
when matched then 
    update set name = t.name 
when not matched then 
    insert (id, name) 
    values (t.id, t.name); 

Это также может быть использован для нескольких строк:

merge into the_table 
using (
    select 1 as id, 'arthur' as name from dual -- first row 
    union all 
    select 2, 'ford' from dual -- second row 
    union all 
    select 3, 'zaphod' from dual -- third row 
) t on (t.id = the_table.id) 
when matched then 
    update set name = t.name 
when not matched then 
    insert (id, name) 
    values (t.id, t.name);