ORA-00932: 数据类型不一致: 预期 NUMBER 从 case 表达式中得到 CHAR
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR from 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
但是我得到这个错误:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
我做错了什么?
原因肯定是 GET_NFES() 返回的是 VARCHAR 结果,而 NUMNOTA 是一个数字。您可以使用 TO_NUMBER() 修复类型,但是这个 SELECT DISTINCT ... 只会触发我,因为在 CASE 中您可以获得多行的地方看起来是错误的。
鉴于您的错误是:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
然后:
CAB.NUMNOTA
是 NUMBER
数据类型并且
GET_NFES(VAR.NUNOTAORIG)
returns 是字符串数据类型。
您需要使用 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)
不是 return 包含数字的字符串,那么尝试将其转换为数字将失败,因此您更可能想要第一个选项优于第二个选项。)
(注意 2:如果 sub-query return 超过一行,您可能会收到更多错误。)
我正在尝试大小写表达式:
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: inconsistent datatypes: expected NUMBER got CHAR
我做错了什么?
原因肯定是 GET_NFES() 返回的是 VARCHAR 结果,而 NUMNOTA 是一个数字。您可以使用 TO_NUMBER() 修复类型,但是这个 SELECT DISTINCT ... 只会触发我,因为在 CASE 中您可以获得多行的地方看起来是错误的。
鉴于您的错误是:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
然后:
CAB.NUMNOTA
是NUMBER
数据类型并且GET_NFES(VAR.NUNOTAORIG)
returns 是字符串数据类型。
您需要使用 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)
不是 return 包含数字的字符串,那么尝试将其转换为数字将失败,因此您更可能想要第一个选项优于第二个选项。)
(注意 2:如果 sub-query return 超过一行,您可能会收到更多错误。)