Vine aquí y seguido por encima de respuesta. Pero la falta de coincidencia en el tipo de orden de datos provocó un error. La siguiente descripción de otra respuesta será útil.
¿Los resultados son los mismos que la secuencia de columnas en su tabla? porque Oracle es estricto en órdenes de columna. este ejemplo de arriba genera un error:
create table test1_1790 (
col_a varchar2(30),
col_b number,
col_c date);
create table test2_1790 (
col_a varchar2(30),
col_c date,
col_b number);
select * from test1_1790
union all
select * from test2_1790;
ORA-01790: la expresión debe tener el mismo tipo de datos como expresión
correspondiente Como se puede ver la causa del error está en el orden de la columna no coincidente que implica mediante el uso de * como especificador de lista de columnas. Este tipo de errores se puede evitar fácilmente mediante la introducción de la lista de columnas de forma explícita:
col_a selecto, col_b, col_c de test1_1790 union all select col_a, col_b, col_c de test2_1790; Un escenario más frecuente para este error es cuando inadvertidamente swap (o Shift) dos o más columnas en la lista SELECT:
select col_a, col_b, col_c from test1_1790
union all
select col_a, col_c, col_b from test2_1790;
O si lo anterior no soluciona el problema, la forma de crear un alias en las columnas como esta: (la consulta no es el mismo que el suyo, pero el punto aquí es cómo agregar alias en la columna.)
SELECT id_table_a,
desc_table_a,
table_b.id_user as iUserID,
table_c.field as iField
UNION
SELECT id_table_a,
desc_table_a,
table_c.id_user as iUserID,
table_c.field as iField
¿Hay alguna manera de completar un valor predeterminado para la columna Nulo? – Hans
@Hans: puede hacer algo como isnull (ColumnName, 0) como ColumnName o isnull (ColumnName, '-') como ColumnName o algo similar. – Kangkan
También puede hacer: seleccionar 'Algunos valores personalizados' como [Col1] ... –