首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ORA-00932:不一致的数据类型:从case表达式中获得的期望数量

ORA-00932:不一致的数据类型:从case表达式中获得的期望数量
EN

Stack Overflow用户
提问于 2022-03-01 15:28:48
回答 2查看 174关注 0票数 0

我在尝试一个案例表达:

代码语言:javascript
运行
复制
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:不一致的数据类型:期望数量已达到

我做错了什么?

EN

Stack Overflow用户

回答已采纳

发布于 2022-03-01 15:36:31

考虑到您的错误是:

代码语言:javascript
运行
复制
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

然后:

  • CAB.NUMNOTA是一个NUMBER数据类型,and
  • GET_NFES(VAR.NUNOTAORIG)返回一个字符串数据类型。

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

因此,要么是:

代码语言:javascript
运行
复制
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"

或者:

代码语言:javascript
运行
复制
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:如果子查询返回多行,则可能会得到进一步的错误。)

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71310869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档