tesis sobre libros investigaciones investigacion historia caracteristicas oracle jdbc merge

sobre - Constantes de fusión Oracle en una sola tabla



libros sobre youtube pdf (5)

En Oracle, dada una tabla de datos simple:

create table data ( id VARCHAR2(255), key VARCHAR2(255), value VARCHAR2(511));

supongamos que quiero "insertar o actualizar" un valor. Tengo algo como:

merge into data using dual on (id=''someid'' and key=''testKey'') when matched then update set value = ''someValue'' when not matched then insert (id, key, value) values (''someid'', ''testKey'', ''someValue'');

¿Hay una mejor manera que esto? Este comando parece tener los siguientes inconvenientes:

  • Cada literal debe escribirse dos veces (o agregarse dos veces mediante la configuración de parámetros)
  • La sintaxis "usar dual" parece hacky

Si esta es la mejor manera, ¿hay alguna forma de tener que establecer cada parámetro dos veces en JDBC?


No considero usar dual para ser un hack. Para deshacerse de la vinculación / tipeo dos veces, haría algo como:

merge into data using ( select ''someid'' id, ''testKey'' key, ''someValue'' value from dual ) val on ( data.id=val.id and data.key=val.key ) when matched then update set data.value = val.value when not matched then insert (id, key, value) values (val.id, val.key, val.value);


Ocultaría el MERGE dentro de una API PL / SQL y luego lo llamaría a través de JDBC:

data_pkg.merge_data (''someid'', ''testKey'', ''someValue'');

Como alternativa a MERGE, la API podría hacer:

begin insert into data (...) values (...); exception when dup_val_on_index then update data set ... where ...; end;


Prefiero probar la actualización antes del inserto para guardar la verificación de una excepción.

update data set ...=... where ...=...; if sql%notfound then insert into data (...) values (...); end if;

Incluso ahora tenemos la declaración de fusión, todavía tiendo a hacer actualizaciones de una sola fila de esta manera, simplemente parece una sintaxis más natural. Por supuesto, la fusión realmente se fortalece cuando se trata de conjuntos de datos más grandes.


Use un procedimiento almacenado


Cuando su fuente y tabla de destino son las mismas, necesita usar DUAL.