我正在尝试一个案例表达式:
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.NUMNOTA
是NUMBER
数据类型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。。。只是触发了我,因为在一个案例中,你可以得到多行的地方看起来是错误的。