vistas tablas sinonimos parametros consultar con complejas oracle select insert alias

oracle - sinonimos - Acceso a tablas con alias



vistas complejas en oracle (3)

Esta pregunta es incorrecta Tuve un gran malentendido acerca de cómo funciona la unión. Estoy leyendo sobre eso ahora.

editar 04.12.2016 Si todavía estás interestelado, puedes ir aquí Seleccionando la columna de la derecha

Tengo algo como esto

with table3 as ( select t1.c1, t1.c2... from table1 t1 union all select t2.c1, t2.c2... from table2 t2 )select * from table3

Necesito insertar todas las filas desde arriba en otra tabla

insert into table4 t4 ( t4.c1, t4.c2... ) select t3.c1, t3.c2... from table3 t3

Mi pregunta es, ¿funcionará esta inserción? Tengo clums en la tabla 1 y 2 con el mismo nombre, ¿tendré que hacer referencia a ellos de alguna manera diferente?

¿Debo escribir de esta manera?

insert into table4 t4 ( t4.c1, t4.c2... ) select t3.t1.c1, t3.t1.c2, t3.t2.c1... from table3 t3


No se necesita alias

si la coincidencia de columna puede simplemente usar insertar seleccionar

insert into table4 ( select t1.c1, t1.c2... from table1 t1 union all select t2.c1, t2.c2... from table2 t2)

de lo contrario, debe declarar el nombre de la columna

insert insert into table4(c1, c2... ) ( select t1.c1, t1.c2... from table1 t1 union all select t2.c1, t2.c2... from table2 t2)


Suponiendo que necesita usar ese UNION ALL , en lugar de instrucciones individuales de inserción como selección para insertar en otra tabla, puede intentar usar alias diferentes para columnas de diferentes tablas:

with table1 as ( select t2.name as t2_name, t2.address as t2_address, t2.age as t2_age, null as t3_name, null as t3_address, null as t3_age, from table2 t2 union all select null, null, null, t3.name, t3.address, t3.age from table3 t3 )


with es parte de una declaración select . Puede insert resultado de select y puede usar with en esta select . Tal vez la sintaxis no es la más intuitiva, pero debería funcionar:

insert into table4 with table3 as ( select t1.c1, t1.c2... from table1 t1 union all select t2.c1, t2.c2... from table2 t2 ) select * from table3;

Y no, no necesitas (incluso no puedes) usar alias dobles.