ORA-00932: 数据类型不一致: 预期 NUMBER 从 case 表达式中获取 CHAR
我正在尝试使用 case 表达式:
SELECT
CASE
WHEN CAB.CODTIPOPER IN (3200, 3201, 3210)
THEN CAB.NUMNOTA
WHEN CAB.CODTIPOPER IN (3100, 3106)
THEN (SELECT DISTINCT GET_NFES(VAR.NUNOTAORIG)
FROM TGFVAR VAR
WHERE VAR.NUNOTAORIG = CAB.NUNOTA)
ELSE NULL
END AS "NUM_NF"
--this select inside the parenthesis is a sql typed per the ERP devs
但出现此错误:
ORA-00932: 数据类型不一致: 预期的 NUMBER 变为 CHAR
我做错了什么?
I'm trying a case expression:
SELECT
CASE
WHEN CAB.CODTIPOPER IN (3200, 3201, 3210)
THEN CAB.NUMNOTA
WHEN CAB.CODTIPOPER IN (3100, 3106)
THEN (SELECT DISTINCT GET_NFES(VAR.NUNOTAORIG)
FROM TGFVAR VAR
WHERE VAR.NUNOTAORIG = CAB.NUNOTA)
ELSE NULL
END AS "NUM_NF"
--this select inside the parenthesis is a sql typed per the ERP devs
But I get this error:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
鉴于您的错误是:
那么:
CAB.NUMNOTA
是NUMBER
数据类型,并且GET_NFES(VAR.NUNOTAORIG)
返回字符串数据类型。您需要使用
TO_CHAR(CAB.NUMNOTA)
或TO_NUMBER(GET_NFES(VAR.NUNOTAORIG))
将它们转换为相同的数据类型。因此,或者:
或者:
(注意:如果
GET_NFES(VAR.NUNOTAORIG)
没有返回包含数字的字符串,那么尝试将其转换为数字将会失败,因此您更有可能想要第一个选项而不是第二个。)(注意 2:如果子查询返回多于一行,您可能会收到更多错误。)
Given that your error is:
Then:
CAB.NUMNOTA
is aNUMBER
data type andGET_NFES(VAR.NUNOTAORIG)
returns a string data type.You need to convert them to be the same data type by either using
TO_CHAR(CAB.NUMNOTA)
orTO_NUMBER(GET_NFES(VAR.NUNOTAORIG))
.So either:
or:
(Note: if
GET_NFES(VAR.NUNOTAORIG)
does not return a string containing a number then trying to convert it to a number will fail so its more likely that the you want the first option over the second.)(Note 2: you may then get further errors if the sub-query returns more than one row.)
原因肯定是 GET_NFES() 返回 VARCHAR 结果,而 NUMNOTA 是 NUMBER。您可以使用 TO_NUMBER() 修复类型,但是这个 SELECT DISTINCT ... 只是触发了我,因为在 CASE 中您可以获得多行结果的地方看起来是错误的。
The cause is certainly that the GET_NFES() is returning VARCHAR result while the NUMNOTA is a NUMBER. You can fix the types with a TO_NUMBER(), however this SELECT DISTINCT ... just triggers me since places where you can get more than one row as a result in a CASE just looks wrong.