ORA-00932: 数据类型不一致: 预期 NUMBER 从 case 表达式中获取 CHAR

发布于 2025-01-10 20:20:29 字数 549 浏览 0 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

画离情绘悲伤 2025-01-17 20:20:29

鉴于您的错误是:

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:如果子查询返回多于一行,您可能会收到更多错误。)

Given that your error is:

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

Then:

  • CAB.NUMNOTA is a NUMBER data type and
  • GET_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) or TO_NUMBER(GET_NFES(VAR.NUNOTAORIG)).

So either:

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"

or:

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"

(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.)

一腔孤↑勇 2025-01-17 20:20:29

原因肯定是 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文