2010-06-22 7 views
13

Tenga en cuenta: I am haciendo la pregunta que quiero que responda. Sé que esta pregunta significa que la base de datos está mal configurada. Por lo tanto, rechazaré cualquier respuesta que sugiera cambiar la forma en que se configura la mesa.Oracle: copie la fila mientras actualiza un campo

Necesito duplicar un grupo de filas, mientras cambio un valor.

name col1 col2 
dave a nil 
sue b nil 
sam c 5 

necesita para convertirse en:

name col1 col2 
dave a nil 
dave a a 
sue b nil 
sue b a 
same c 5 

IE para todas las entradas de esta tabla, donde col2 is null, crear una nueva entrada en la tabla donde namecol1 y son el copiado, y col2 es a.

+0

¿Quieres decir 'NULL' cuando ocasionalmente declaras' nil'? – tvCa

Respuesta

17

Uso:

INSERT INTO table 
    (name, col1, col2) 
SELECT t.name, t.col1, 'a' 
    FROM TABLE t 
WHERE t.col2 IS NULL 

Eso suponiendo ni los namecol1 o columnas son una clave principal o tiene una restricción única en cualquiera de los dos.

+0

Comentario anterior eliminado: Encontré mi error. Sí, esto funcionó. ¡Gracias! –

+3

Este código requiere repetir la lista de columnas de la tabla, y se romperá si se agrega una columna a la tabla. ¿Hay alguna forma de hacerlo sin enumerar las columnas poco interesantes? –

+0

@kevincline Consulte http://stackoverflow.com/a/28278824/1611055 –

3

¿Esto lo hará?

INSERT INTO yourtable 
     (SELECT name, col1, 'a' 
      FROM yourtable 
     WHERE col2 is NULL); 
+0

+1 buena respuesta, aunque en realidad no funciona en mi caso. Solo estoy poblando algunos de los campos de la tabla. –

+0

Debería, pero se arriesga a un error de ORA si hay más columnas en la tabla. –

+0

Sí, la suposición era que la tabla tenía las columnas en el ejemplo. – DCookie

0

Si el número de columnas es grande, se puede copiar los datos que desea en una tabla temporal, alterar los datos en la tabla temporal como lo hubiera querido, a continuación, copiar el contenido de la tabla temporal de nuevo en el original y eliminar la tabla temporal.

Cuestiones relacionadas