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 休眠/弹簧启动