博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle关联查询-数据类型不一致问题 ORA-01722: 无效数字
阅读量:7187 次
发布时间:2019-06-29

本文共 733 字,大约阅读时间需要 2 分钟。

一、存在表A和表B,都包含字段user_no,但数据类型不一致,如下:

create table A (

  user_id varchar2(20),

  user_no number(12,0),

  xxx

);

create table B (

  user_name varchar2(60),

  user_no varchar2(20),

  xxx

);

 

二、现有某项业务需要用到A.user_id和B.user_name,通过user_no来做关联查询,如下:

select A.user_id,B.user_name from A,B where A.user_no=B.user_no;

select A.user_id,B.user_name from A,B where A.user_no=B.user_no and A.user_no='1234567';

 

三、问题:

1.当A.user_no和B.user_no全部为数字类型时,以上脚本是没有问题的;

2.当B.user_no的某一个或多个值包含非数字字符时,该脚本会报:ORA-01722: 无效数字

 

四、原因:

深层次原因待后续分析。

 

五、反思:

1.最根本的,应该避免不同表同一字段的数据类型不一致;

2.关联查询时增加数据类型转换,如:select A.user_id,B.user_name from A,B where to_char(A.user_no)=B.user_no;

3.如果项目中已经存在这种情况,应该确保varchar2类型的字段不会包含非数字字符。

转载于:https://www.cnblogs.com/yuhebin/p/10949683.html

你可能感兴趣的文章
#pragma once
查看>>
node.js打开浏览器
查看>>
四、Oracle的复杂查询
查看>>
logback高级特性一
查看>>
超棒的自定义超酷滚动条jQuery插件 - Perfect Scrollbar
查看>>
进程组 会话组 控制终端
查看>>
Maclean答网友问:深入进阶学习Oracle数据库的规划
查看>>
LINUX下CDT和EDT时区的切换
查看>>
[Android] 备份手机上的超级终端、VIM
查看>>
读写分离,就该这么改进
查看>>
【算法和数据结构】_1_排序算法_1
查看>>
Android学习笔记38:Android四大组件之Activity
查看>>
ExtJs八(ExtJs Mvc创建ViewPort续)
查看>>
oracle跨库查询dblink的用法
查看>>
打印整数的划分方法
查看>>
(转)新建一个Agent/MyAgent详细过程
查看>>
Python天天美味(7) - 连接字符串(join %)(转)
查看>>
21分钟 MySQL 入门教程
查看>>
泛型通配符泛型中使用 通配符
查看>>
扇入和扇出
查看>>