首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于解析ORA-01790的视图数据类型:表达式必须与相应表达式具有相同的数据类型

用于解析ORA-01790的视图数据类型:表达式必须与相应表达式具有相同的数据类型
EN

Stack Overflow用户
提问于 2017-01-31 07:43:06
回答 1查看 484关注 0票数 0

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

代码语言:javascript
运行
复制
select *
from ALL_1
union all
select *
from ALL_2
union all
select *
from ALL_3
/

我一直收到"ORA-01790:表达式必须与相应的表达式具有相同的数据类型“,所以很明显,其中一个表中的一个数据类型是不同的。每个表应该有40列。我想并排查看每一列的数据类型,以便能够搜索差异。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2017-01-31 07:54:46

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

例如:

代码语言:javascript
运行
复制
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)

否则,您可以查询目录表。这种方法可能更好,因为您可以编写代码来为您进行检查(以准确地找到差异所在),而不是手动进行检查。

代码语言:javascript
运行
复制
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_NAMECOLUMN_ID添加到SELECT子句,并将WHERE子句更改为IN (....)条件;添加order by column_id,然后检查输出-列应该成组出现,首先是所有三个表中的第一列,然后是所有三个表中的第二列,依此类推。或者编写代码到count(distinct data_type)group by column_id,并查看哪些组的计数大于1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41947381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档