ora-00932 不一致的数据类型预期数字得到 char plsql

Posted

技术标签:

【中文标题】ora-00932 不一致的数据类型预期数字得到 char plsql【英文标题】:ora-00932 inconsistent datatypes expected number got char plsql 【发布时间】:2021-10-27 04:52:36 【问题描述】:

我试着写一个 SQL

SELECT
    CASE
        WHEN SOURCE_SYSTEM <> 'SHIELD' 
            THEN NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)
        WHEN SOURCE_SYSTEM = 'SHIELD' AND UPPER(PRODUCT_NAME_EN) = 'CANCER' AND NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM) < 100000
            THEN 'LESS THAN 100K'
        ELSE 'OTHER' 
    END AS NEW_GROUP
FROM TABLE

我也尝试了相同的代码,但略有不同

SELECT
    CASE
        WHEN SOURCE_SYSTEM <> 'SHIELD' 
            THEN NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)
        WHEN SOURCE_SYSTEM = 'SHIELD' AND UPPER(PRODUCT_NAME_EN) = 'CANCER' AND TO_NUMBER(NVL(NOMINAL_PREMIUM, PAYABLE_PREMIUM)) < 100000
            THEN 'LESS THAN 100K'
        ELSE 'OTHER' 
    END AS NEW_GROUP
FROM TABLE

仍然出现同样的错误:

ORA-00932:不一致的数据类型:预期 NUMBER 得到 CHAR

我能做些什么来解决这个问题?

【问题讨论】:

如果没有数据类型的表结构,我们如何猜测?请提供。 我的错,source_system varchar2(50),nominal_premium number(22,2),payable_premium number(22,2),product_name_en varchar2(1000)。 【参考方案1】:

这是因为您在第一个“case-when”和“else”部分的类型不同。

这会返回一个数字:

THEN NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)

而在这里你会得到一个字符:

THEN 'LESS THAN 100K'

解决方案是将数字转换为字符:

NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM) -> to_char(NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM))

所以,这就是我为了摆脱这个错误所做的事情

with test_data(source_system, nominal_premium, payable_premium, product_name_en) as (
  select 'a', 1, 2, 'b' from dual
)

SELECT
CASE WHEN SOURCE_SYSTEM <> 'SHIELD' 
     THEN to_char(NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM))
     WHEN SOURCE_SYSTEM = 'SHIELD' AND upper(PRODUCT_NAME_EN) = 'CANCER' AND TO_NUMBER(NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)) <100000
     THEN 'LESS THAN 100K'
     ELSE 'OTHER' END AS NEW_GROUP
FROM test_data

【讨论】:

感谢您的回答,但似乎无法为我解决问题,仍然出现相同的错误消息 @ThinhLe 这很奇怪。我已经用整个查询更新了答案。请检查你是否也在做同样的事情? 非常感谢!这次效果很好! 没问题,很高兴它有帮助

以上是关于ora-00932 不一致的数据类型预期数字得到 char plsql的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00932: 不一致的数据类型: 预期 - 得到 - ORA-06512:

ORA-00932: 不一致的数据类型: 预期 - 得到 CLOB

如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -

ORA-00932: 不一致的数据类型: 预期 - 得到 clob 休眠/弹簧启动

无法选择 *(ORA-00932:不一致的数据类型:预期的 CHAR 得到了 ADT)

查找错误 ORA-00932:不一致的数据类型:预期的 DATE 得到了 NUMBER