oracle invalide number错误

今天遇到了一个奇怪的问题:
sql如下

                SELECT
                    P .*, d1.dicName noticeTypeName
                FROM
                    pro_purnotice P
                LEFT JOIN (
                    SELECT
                        dicValue,
                        dicName
                    FROM
                        dictionarydata D
                    WHERE
                        dicCategorID = (
                            SELECT
                                ID
                            FROM
                                dictionarycategory c
                            WHERE
                                c.categoryCode = 'noticeType'
                            AND c.purchaserNo = 'CG5008'
                        )
                ) d1 ON P .noticeType = d1.dicValue
                WHERE
                    purchaseNo = 'CG5008'
         AND p.NOTICETYPE = 1
                 ORDER BY
                    ID DESC

p.NOTICETYPE = 1 会报错,但是p.NOTICETYPE = 2不会报错!
这到底是为什么?

pro_purnotice表中,NOTICETYPEnumber类型,讲道理不会有问题啊。
但是 我发现 在dictionarydata 表中dicValuevarchar2类型,如果
这样P .noticeType = d1.dicValue numbervarchar2匹配会不会出问题?

但是 运行这个:

 SELECT
                    P .*, d1.dicName noticeTypeName
                FROM
                    pro_purnotice P
                LEFT JOIN (
                    SELECT
                        dicValue,
                        dicName
                    FROM
                        dictionarydata D
                    WHERE
                        dicCategorID = (
                            SELECT
                                ID
                            FROM
                                dictionarycategory c
                            WHERE
                                c.categoryCode = 'noticeType'
                            AND c.purchaserNo = 'CG5008'
                        )
                ) d1 ON P .noticeType = d1.dicValue
                WHERE
                    purchaseNo = 'CG5008'

是没问题的。说明是可以匹配的,那么和dicValue 匹配后的noticeType 值,还是number类型吗?
我是这样想的:
只要和dicValue 匹配的noticeType 值都已经不是number类型了,没有和dicValue 匹配的noticeType 值 ,还是number类型。

因为P .noticeType=1 能够匹配 到 ,但是P .noticeType=2 没有匹配到,所以P .noticeType=2 不会报错。

解决办法:
P .noticeType = to_number2(d1.dicValue)
AND to_number2(p.NOTICETYPE) = 1

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值