我在尝试一个案例表达:
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:不一致的数据类型:期望数量已达到
我做错了什么?
发布于 2022-03-01 15:36:31
考虑到您的错误是:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR然后:
CAB.NUMNOTA是一个NUMBER数据类型,andGET_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:如果子查询返回多行,则可能会得到进一步的错误。)
发布于 2022-03-01 15:36:06
原因肯定是GET_NFES()返回VARCHAR结果,而NUMNOTA是一个数字。您可以使用TO_NUMBER()来修复这些类型,但是这个选择是不同的.只是触发了我,因为在一个案例中,你可以得到多个行的地方看起来是错误的。
https://stackoverflow.com/questions/71310869
复制相似问题