Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/02/2012, 01:20
miguelmeneses_16
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Mensaje Merge En Oracle 10g

Amigos cuando estoy haciendo un merge que me actualice y me inserte.

tabla respuesta_est
fknum_preg_car es foraneo de la tabla pregunta
fkencuestaEST_ESTP_ID foreneo de la tabla estudiante
fkencuestaEST_PEUN_ID foraneo de la tabla periodo
respuesta

En mysql lo hago de esta forma

insert into respuesta_est (respuesta,fknum_preg_car,fkencuestaEST_ESTP_ID,fk encuestaEST_PEUN_ID) values('1002',1,12,103) on duplicate key update Respuesta=2;

En oracle 10g lo hago de esta forma

MERGE INTO
respuesta_est res
USING ( SELECT respuesta, fknum_preg_car, fkencuestaEST_ESTP_ID, fkencuestaEST_PEUN_ID FROM respuesta_est
WHERE fknum_preg_car=4 and fkencuestaEST_ESTP_ID=12 and fkencuestaEST_PEUN_ID=103 and respuesta=888588) e
ON ( e.fkencuestaEST_ESTP_ID =res.fkencuestaEST_ESTP_ID and e.fknum_preg_car=res.fknum_preg_car)
WHEN MATCHED
THEN
UPDATE
SET res.respuesta = 000012 where res.fkencuestaEST_ESTP_ID = e.fkencuestaEST_ESTP_ID and res.fknum_preg_car = e.fknum_preg_car
WHEN NOT MATCHED
THEN
insert(res.respuesta,res.fknum_preg_car,res.fkencu estaEST_ESTP_ID,res.fkencuestaEST_PEUN_ID)VALUES (9111111, e.fknum_preg_car, e.fkencuestaEST_ESTP_ID, e.fkencuestaEST_PEUN_ID) where e.respuesta <> 888588;

Con el único inconveniente que no me esta insertando cuando un el mismo estudiante me inserta otra respuesta..

Espero un pronta colaboración
Gracias por su tiempo.