【问题标题】:How to fix Nested CASE Syntax Error "Invalid Number of Arguments" in Oracle SQL如何修复 Oracle SQL 中的嵌套 CASE 语法错误“参数数量无效”
【发布时间】:2019-06-24 01:13:14
【问题描述】:

我在 Oracle 中运行查询并尝试创建一个由下面的嵌套 CASE 语句定义的新列。我在突出显示的“Else”语句中出现错误,说“参数数量无效”。

我看了很多遍,它似乎有正确数量的参数。我在这里错过了什么吗?

SELECT 
CASE
    WHEN TRD_TYP IN ('Swaption', 'IRG Floor', 'IRG Cap') 
    THEN 
        CASE
            WHEN BUY_SELL = 'BUY' 
            THEN CURR_NOTNL_CUR 
            ELSE -CURR_NOTNL_CUR
        END
    ELSE
        CASE 
            WHEN TRD_TYP = 'IRSWAP' 
            THEN CURR_NOTNL_CUR                 
        END
    **ELSE**
        CASE 
            WHEN TRD_TYP = 'EQSWAP' 
            THEN CURR_NOTNL_UNIT
        END
    ELSE
        CASE 
            WHEN TRD_TYP = 'FUTURE' 
            THEN
                CASE
                    WHEN BUY/SELL = 'BUY' 
                    THEN CURR_NOTNL_CUR / PRC 
                    ELSE -CURR_NOTNL_CUR / PRC
                END
        END
    ELSE
        CASE 
            WHEN BUY_SELL = 'BUY' 
            THEN CURR_NOTNL_UNIT 
            ELSE -CURR_NOTNL_UNIT
        END
END AS UNITS_OF_UNDERLYING
FROM ACTLANN.HDG_ASST_DTLS

【问题讨论】:

  • 什么是**ELSE**(假设它应该突出显示报告错误的位置)应该是ELSE of
  • 是的,这是我得到错误的地方。但是,如果我删除该 ELSE 部分本身,则错误会转移到下一个 ELSE
  • 是的——但他们应该做什么?你有外部的CASE 和一个WHEN 和四个ELSEs,这是不对的。

标签: sql oracle case


【解决方案1】:

好像你想要的:

SELECT 
CASE
    WHEN TRD_TYP IN ('Swaption', 'IRG Floor', 'IRG Cap')
    THEN
        CASE
            WHEN BUY_SELL = 'BUY' 
            THEN CURR_NOTNL_CUR 
            ELSE -CURR_NOTNL_CUR
        END
    WHEN TRD_TYP = 'IRSWAP'
    THEN CURR_NOTNL_CUR                 
    WHEN TRD_TYP = 'EQSWAP'
    THEN CURR_NOTNL_UNIT
    WHEN TRD_TYP = 'FUTURE'
    THEN
        CASE
            WHEN BUY/SELL = 'BUY' 
            THEN CURR_NOTNL_CUR / PRC 
            ELSE -CURR_NOTNL_CUR / PRC
        END
    ELSE
        CASE 
            WHEN BUY_SELL = 'BUY' 
            THEN CURR_NOTNL_UNIT 
            ELSE -CURR_NOTNL_UNIT
        END
END AS UNITS_OF_UNDERLYING
FROM ACTLANN.HDG_ASST_DTLS

您的代码有多个针对外部CASE 表达式的ELSE 子句,并且只能有一个。前三个每个都有一个内部CASE,它不需要在那里; WHEN ... THEN 可以“提升”到外部表达式。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
相关资源
最近更新 更多