簡體   English   中英

在子查詢中出現ORA-01427錯誤和ORA-00907錯誤

[英]Getting ORA-01427 error and ORA-00907 error in subquery

我在正常工作的查詢中得到了這個:

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

然后,我想添加一個新參數(像'%Extra%'這樣的aven.lib並將其解碼為'額外')。

所以我創建一個帶有案例的子查詢來做到這一點:

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,但是它不可用。

感謝您的幫助。

首先,將您的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

在這種情況下使用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

謝謝您的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM