Sql 要解析ORA-01790,请查看数据类型:表达式必须具有与相应表达式相同的数据类型

Sql 要解析ORA-01790,请查看数据类型:表达式必须具有与相应表达式相同的数据类型,sql,oracle,ora-01790,Sql,Oracle,Ora 01790,我正在尝试合并三个表,每个表都应该具有相同数据类型的相同列: select * from ALL_1 union all select * from ALL_2 union all select * from ALL_3 / 我不断得到“ORA-01790:expression必须与相应的expression具有相同的数据类型”,所以显然其中一个表中的一个数据类型是不同的。每个表应该有40列。我想并排查看每列的数据类型,以便查找差异。我该怎么做呢?在SQL*Plus、SQL Developer

我正在尝试合并三个表,每个表都应该具有相同数据类型的相同列:

select *
from ALL_1
union all
select *
from ALL_2
union all
select *
from ALL_3
/

我不断得到“ORA-01790:expression必须与相应的expression具有相同的数据类型”,所以显然其中一个表中的一个数据类型是不同的。每个表应该有40列。我想并排查看每列的数据类型,以便查找差异。我该怎么做呢?

在SQL*Plus、SQL Developer、Toad中,您可以使用SQL*Plus命令
描述

例如:

SQL> describe scott.emp

 Name                                              Null?    Type
 ------------------------------------------------- -------- ------------------------
 EMPNO                                             NOT NULL NUMBER(4)
 ENAME                                                      VARCHAR2(10)
 JOB                                                        VARCHAR2(9)
 MGR                                                        NUMBER(4)
 HIREDATE                                                   DATE
 SAL                                                        NUMBER(7,2)
 COMM                                                       NUMBER(7,2)
 DEPTNO                                                     NUMBER(2)
否则,您可以查询目录表。这种方法可能更好,因为您可以编写代码来进行检查(准确地找到差异所在),而不是手动进行检查

SQL> select column_name, data_type, data_length, data_precision, data_scale
  2  from   all_tab_columns
  3  where  owner = 'SCOTT' and table_name = 'EMP'
  4  order by column_id;

COLUMN_NAME      DATA_TYPE          DATA_LENGTH DATA_PRECISION DATA_SCALE
---------------- ------------------ ----------- -------------- ----------
EMPNO            NUMBER                      22              4          0
ENAME            VARCHAR2                    10
JOB              VARCHAR2                     9
MGR              NUMBER                      22              4          0
HIREDATE         DATE                         7
SAL              NUMBER                      22              7          2
COMM             NUMBER                      22              7          2
DEPTNO           NUMBER                      22              2          0

8 rows selected.

例如,您可以将
TABLE\u NAME
COLUMN\u ID
添加到
SELECT
子句中,并将
WHERE
子句更改为
IN(..)
条件;添加
按列\u id排序
,然后检查输出-列应成组显示,首先是所有三个表中的第一列,然后是所有三个表中的第二列等,或者将代码写入
计数(不同的数据类型)
按列\u id分组
,并查看哪些组的计数大于1。

列可能在原始DDL中以不同的顺序声明。为什么不编写一个查询,将表连接到一个公共键上,并尝试找出差异呢?