Insert/select

danny
08 de Marzo del 2006
hola,

tengo que cargar una tabla con la sentencia insert/select en la cual
la primera columna es una column_id(numérico secuencial) ¿existe
alguna función simple que me permita rellenar esta columna cuando hago
la select sin tener que crear una secuencia en la base de datos?

muchas gracias,

danny

chemian
08 de Marzo del 2006
insert into tabla select max(column_id) +1 from tabla

danny
08 de Marzo del 2006
Lo he intentado pero la select devuelve más de una fila.

Te envio el esquema de select para que la eches un vistazo:

insert into tabla4
select MAX(dd.colum_id)+1,
tabla1.colum_b,
tabla2.column_c,
tabla2.column_d
from tabla1,
tabla2,
tabla3,
tabla4
where tabla1.column_p=tabla3.column_p
and tabla3.column_q=tabla2.column_q
and tabla1.column_r=tabla4.column_r
group by tabla1.colum_b, tabla2.column_c,tabla3.column_d;

Muchas gracias,

danny

chemian
08 de Marzo del 2006
Es un poco rudimentario, pero si no quieres utilizar secuencias, aqui tienes lo que puedes hacer

insert into tabla4
select (select MAX(dd.colum_id)+1 from tabla1),
tabla1.colum_b,
tabla2.column_c,
tabla2.column_d
from tabla1,
tabla2,
tabla3,
tabla4
where tabla1.column_p=tabla3.column_p
and tabla3.column_q=tabla2.column_q
and tabla1.column_r=tabla4.column_r

ya me diras si te vale.

danny
08 de Marzo del 2006
Me temo que no me va a servir porque la columna que necesito que sea secuencial es la que rellena el max(column_id), y la select devuelve el mismo valor en todos los registros

alfaq
08 de Marzo del 2006
Te sirve esto

insert into tabla4 as
select
ROWNUM secuencia,
tabla1.colum_b,
tabla2.column_c,
tabla2.column_d
from tabla1,
tabla2,
tabla3,
tabla4
where tabla1.column_p=tabla3.column_p
and tabla3.column_q=tabla2.column_q
and tabla1.column_r=tabla4.column_r

alfaq
08 de Marzo del 2006
perdón no habia visto el post anterior,
no se me ocurre otra cosa

alfaq
08 de Marzo del 2006
Mil disculpas nuevamente, por error cometido en la respuesta, incluso me equivoque en la sentencia, estuve ejecutando pruebas con un create table as select y al pasarlo al post lo hice mal. En otras palabras la sentencia que puse no sirve.

Se me ocurre que para lo que quieres hacer crees una vista a partir del select que presentas, y que posteriormente realices el insert a partir de la vista, en este caso si podrás utilizar el rownum.

chemian
08 de Marzo del 2006
Ok, prueba esto entonces,

insert into tabla4
select (select MAX(dd.colum_id) from tabla1) +ROWNUM,
tabla1.colum_b,
tabla2.column_c,
tabla2.column_d
from tabla1,
tabla2,
tabla3,
tabla4
where tabla1.column_p=tabla3.column_p
and tabla3.column_q=tabla2.column_q
and tabla1.column_r=tabla4.column_r

¿Esta si?

danny
08 de Marzo del 2006
Lo he intentado pero la select devuelve más de una fila.

Te envio el esquema de select para que la eches un vistazo:

insert into tabla4
select MAX(dd.colum_id)+1,
tabla1.colum_b,
tabla2.column_c,
tabla2.column_d
from tabla1,
tabla2,
tabla3,
tabla4
where tabla1.column_p=tabla3.column_p
and tabla3.column_q=tabla2.column_q
and tabla1.column_r=tabla4.column_r
group by tabla1.colum_b, tabla2.column_c,tabla3.column_d;

Muchas gracias,

danny