【UNION】ORA-01790错误模拟及分析一例

原文出处:http://space.itpub.net/519536/viewspace-627340

 

ORA-01790错误提示信息是“expression must have same datatype as corresponding expression”,如果使用oerr命令查看,没有过多的描述信息。
单纯从错误信息的内容其实就可以大概看出问题出处,是由于数据类型不一致引起的报错。

这里我通过一个实验模拟一下这个错误,然后给出一个解决方法。
实验中我们将使用UNION ALL操作来模拟这个错误,因为UNION ALL要求多个UNION内容对应字段的数据类型要严格一致。

1.创建三个实验用表T1、T2和T3
sec@ora10g> create table t1 (x varchar2(10), y varchar2(10));

Table created.

sec@ora10g> create table t2 (x varchar2(10), y varchar2(10));

Table created.

sec@ora10g> create table t3 (x int, y varchar2(10));

Table created.

注意T1和T2表的所有字段类型均为“VARCHAR2”,T3表的X字段类型是“INT”。

2.每张表初始化一条记录
sec@ora10g> insert into t1 values ('1', 'secooler');

1 row created.

sec@ora10g> insert into t2 values ('2','HOU');

1 row created.

sec@ora10g> insert into t3 values (3,'Andy');

1 row created.

sec@ora10g> commit;

Commit complete.

3.先看正确的使用方法
sec@ora10g> select * from t1
  2  union all
  3  select * from t2;

X          Y
---------- ----------
1          secooler
2          HOU

由于T1表和T2表的字段类型相同,故此处可以得到正确的结果。

4.使用T2和T3表来模拟ORA-01790错误
sec@ora10g> select * from t1
  2  union all
  3  select * from t3;
select * from t1
       *
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression

由于是我们设计的场景,此时我们真切的经历了ORA-01790错误发上过程。
原因是显然的,T1表的X列类型是VARCHAR2,这与T3表X列INT类型不符。

5.规避ORA-01790错误的一种方法
针对这个案例,这里我们采用TO_CHAR函数强制将T3表的X列转换为字符串类型的方法来处理。
sec@ora10g> select * from t1
  2  union all
  3  select to_char(x),y from t3;

X                                        Y
---------------------------------------- ----------
1                                        secooler
3                                        Andy

6.MOS中的参考信息
[ID 19128.1]
OERR: ORA 1790 expression must have same datatype as corresponding expression
Error:  ORA 1790
Text:   expression must have same datatype as corresponding expression
-------------------------------------------------------------------------------
Cause:  A SELECT list item corresponds to a SELECT list item with a different
        datatype in another query of the same set expression.
Action: Check that all corresponding SELECT list items have the same datatypes.
        Use the TO_NUMBER, TO_CHAR, and TO_DATE functions to do explicit data
        conversions.


7.小结
在使用UNION时,需要注意用到的字段类型要保证一致;
不要放过任何报错信息后面隐含的真实原因,处理问题的过程就是自身提高的过程。

Good luck.

secooler
10.02.20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值