2012-04-17 36 views
14

Me gustaría insertar N filas que son todas idénticas, excepto que uno de los valores es diferente. En concreto, esto es lo que estoy tratando:Oracle SQL: inserte varias filas en una tabla con una declaración.

insert into attribute_list (id,value,name) 
values 
(
select (id,'Y','is_leveled') from value_list where val >= 50 
); 

Así, por cada valor que tiene un valor> = 50, me gustaría insertar una fila en attribute_list. ¿Se puede hacer esto con una instrucción de inserción o debería simplemente generar estos insertos manualmente en Excel?

(nota: este es un ejemplo simplificado cocinado para aclarar el tema, por lo que no hay necesidad de atacar a la inutilidad de este caso específico)

+0

lo tanto, si varias filas en value_list para el mismo id tienen valor> = 50, ¿desea fila una duración de esa identificación en attribute_list? –

+0

@ShannonSeverance Pregunta genial. Supongo que, si solo quisiera una vez, solo seleccionaría identificadores únicos con una selección secundaria. – Jeremy

+1

O bien, seleccione la id distinta, 'Y', 'is_leveled' de .... ' –

Respuesta

22

Puede hacer absolutamente esto en una sola declaración!

Prueba esto:

INSERT INTO attribute_list (id, value, name) 
SELECT id, 'Y', 'is_leveled' 
FROM value_list WHERE val >= 50 
+0

¡Hermoso, gracias! – Jeremy

1

Usted puede hacer una SELECT ... INTO si usted puede consultar los datos. De lo contrario, para crear datos que había necesidad de usar PL/SQL

Si usted tiene los datos a continuación, tratar:

select id,'Y','is_leveled' 
INTO attribute_list 
from value_list where val >= 50 
4

Eso es lo que son para FOR loops.

DECLARE 
    x NUMBER := 100; 
BEGIN 
    FOR i IN 1..10 LOOP 
     IF MOD(i,2) = 0 THEN  -- i is even 
     INSERT INTO temp VALUES (i, x, 'i is even'); 
     ELSE 
     INSERT INTO temp VALUES (i, x, 'i is odd'); 
     END IF; 
     x := x + 100; 
    END LOOP; 
    COMMIT; 
END; 
+0

Creo que esto olvidó el objetivo de la pregunta. Inserta valores múltiples, pero no con una sola declaración. – MJB

+0

Considero que estas inserciones de una línea son útiles para la cosa real: el lazo. Tan pronto como las cosas se pongan solo un poco interesantes, debes hacer un ciclo de todos modos. – nes1983

2

Necesita un INSERT de SELECT. Para ello se debe omitir el VALUES y sólo hacer:

insert into attribute_list (id,value,name) 
select (id,'Y','is_leveled') from value_list where val >= 50; 

He aquí un ejemplo: http://psoug.org/reference/insert.html

Cuestiones relacionadas