ORA-00932:不一致的数据类型:应为NUMBER,从事例表达式中获取CHAR



我正在尝试一个案例表达式:

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

我做错了什么?

假设您的错误为:

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

然后:

  • CAB.NUMNOTANUMBER数据类型
  • GET_NFES(VAR.NUNOTAORIG)返回字符串数据类型

您需要使用TO_CHAR(CAB.NUMNOTA)TO_NUMBER(GET_NFES(VAR.NUNOTAORIG))将它们转换为相同的数据类型。

所以要么:

SELECT CASE
WHEN CAB.CODTIPOPER IN (3200, 3201, 3210) 
THEN TO_CHAR(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"

或:

SELECT CASE
WHEN CAB.CODTIPOPER IN (3200, 3201, 3210) 
THEN CAB.NUMNOTA
WHEN CAB.CODTIPOPER IN (3100, 3106) 
THEN (SELECT DISTINCT
TO_NUMBER(GET_NFES(VAR.NUNOTAORIG))
FROM   TGFVAR VAR 
WHERE  VAR.NUNOTAORIG = CAB.NUNOTA) 
ELSE NULL
END AS "NUM_NF"

(注意:如果GET_NFES(VAR.NUNOTAORIG)没有返回包含数字的字符串,那么尝试将其转换为数字将失败,因此您更可能想要第一个选项而不是第二个选项。(

(注意2:如果子查询返回多行,则可能会出现更多错误。(

原因肯定是GET_NFES((返回VARCHAR结果,而NUMNOTA是一个NUMBER。您可以使用TO_NUMBER((修复类型,但是此SELECT DISTINCT。。。只是触发了我,因为在一个案例中,你可以得到多行的地方看起来是错误的。

相关内容

  • 没有找到相关文章

最新更新