2010-02-25 21 views
7

que tienen este sencillo ejemplo no puedo parece conseguir trabajo:Oracle MERGE no inserta

MERGE INTO mytable mt 
USING dual 
ON (mt.id = 'AAA') 
WHEN MATCHED THEN 
    UPDATE SET mt.name = 'updated' 
WHEN NOT MATCHED THEN 
    INSERT (mt.id , mt.name) 
    VALUES ('AAA', 'Gooood'); 

Si el registro de un 'AAA' existe en la tabla, se ha actualizado correctamente.

Pero si no existe, no es insertado:

Affected rows: 0 
Time: 0.003ms 

Cualquier pista sobre lo que estoy haciendo mal?

+0

¿Qué herramienta se está utilizando que responde "filas afectadas: 0 Tiempo: 0.003ms"? –

+0

Uno se pregunta si el OP se está fusionando sin compromiso en una sesión y consultando desde otra. O si la aplicación existente está interpretando correctamente la salida del análogo de SQL% ROWCOUNT. –

+0

¿Es posible que su tabla 'mytable' requiera más que' id' y 'name' para hacer una inserción válida? –

Respuesta

8

funciona para mí:

SQL> create table mytable (id varchar(3), name varchar(30)); 

Table created. 

SQL> MERGE INTO mytable mt 
    2 USING dual 
    3 ON (mt.id = 'AAA') 
    4 WHEN MATCHED THEN 
    5  UPDATE SET mt.name = 'updated' 
    6 WHEN NOT MATCHED THEN 
    7  INSERT (mt.id , mt.name) 
    8  VALUES ('AAA', 'Gooood'); 

1 row merged. 

SQL> select * from mytable; 

ID NAME 
--- ------------------------------ 
AAA Gooood 
+0

Yo también en 10.2.0.4. – DCookie

+0

Uso Oracle 9.2 ... Escuché que la función MERGE es "mejor" en Oracle 10: - / – Jalil

Cuestiones relacionadas