在子查询中出现ORA-01427错误和ORA-00907错误

时间:2016-03-21 11:08:18

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

我在一个正常运行的查询中得到了这个:

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

然后我想添加一个新参数(aven.lib喜欢'%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,但它不可用。

感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在案例中使用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

感谢您的帮助