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

你可能感兴趣的:(oracle invalide number错误)