【问题标题】:Getting ORA-01427 error and ORA-00907 error in subquery在子查询中出现 ORA-01427 错误和 ORA-00907 错误
【发布时间】:2016-07-07 20:48:36
【问题描述】:

我在正常工作的查询中得到了这个:

decode(substr(X_AV_ID,1,3)  
,'ECU','eCom'  
, decode(aven.lib, 'eCom', 'eCom','Autre')) flag,  

然后我想添加一个新参数(aven.lib Like '%Extra%' 并将其解码为'extra')。

所以我创建了一个带有案例的子查询:

decode(substr(X_AV_ID,1,3),  
                    'ECU', 'eCom',   
                    (select Case    
                        When aven.lib = 'eCom' Then 'eCom'  
                        When aven.lib Like '%Extra%' Then 'extra'  
                        Else 'Autre'  
                        End  
                     From table_x aven  
                     Limit 1     
                    )  
            ) flag  

我将结果限制为 1 以避开 ORA-01427 错误,但现在我得到了 ORA-00907 错误。

我想在解码命令中使用like,但它不可用。

感谢您的帮助。

【问题讨论】:

    标签: sql subquery case ora-00907 ora-01427


    【解决方案1】:

    首先,将您的decode 重写为case

    (case when substr(X_AV_ID, 1, 3) = 'ECU' then 'eCom'
          when aven.lib = 'eCom' then 'eCom'
          then 'Autre'
     end) as flag
    

    大概aven 已经在查询中了。所以,你可以这样做:

    (case when substr(X_AV_ID, 1, 3) = 'ECU' then 'eCom'
          when aven.lib = 'eCom' then 'eCom'
          when aven.lib like '%Extra%' then 'extra'  
          then 'Autre'
     end) as flag
    

    注意:我会一直使用like 进行第一次比较,并且可能会结合前两个:

    (case when X_AV_ID like 'ECU%' or aven.lib = 'eCom'
          then 'eCom'
          when aven.lib like '%Extra%'
          then 'extra'  
          then 'Autre'
     end) as flag
    

    【讨论】:

    • 谢谢,我试过了,但我得到了这个 ORA-00905,再次将它放在选择中,但它是一样的
    • @naouf3l 。 . .您应该添加整个查询。这些表达式中没有明显的关键字缺失。
    • 好吧,这是因为语法的原因,我当时写的而不是 Else。所以现在我有了这个 ORA-01427:单行子查询返回不止一行
    • @naouf3l 。 . .此答案中没有子查询,因此您的问题与此答案无关。
    【解决方案2】:

    在案例中使用 regexp_like 效果很好,我得到的结果除外。

                Case  
    
                                When substr(X_AV_ID,1,3) = 'ECU'  Then 'eCom'
    
                                When aven.lib= 'eCom' Then 'eCom'
    
                                When  REGEXP_LIKE (aven.X_AV_LIBELLE, 'extra', 'i') Then 'extra'
    
                                Else 'Autre'
    
                                End
    

    感谢您的帮助

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 2015-05-15
      • 2014-06-24
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多