2016-03-21 7 views
0

Я получил это в запросе, который работает нормально:Получение ORA-01427 ошибка и ORA-00907 ошибка в подзапроса

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

Тогда я хочу, чтобы добавить новый параметр (aven.lib LIKE «%» 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 до EVIT ошибку ORA-01427, но теперь я получил ошибку ORA-00907.

Я хотел использовать команду decode, но она недоступна.

Спасибо за помощь.

+1

Oracle и 'LIMIT'? – jarlh

ответ

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 

Спасибо за вашу помощь

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 
+0

Спасибо, я попробовал, но я получил этот ORA-00905, положил его в select снова, но это то же самое – naouf3l

+0

@ naouf3l. , , Вы должны добавить весь запрос. В этих выражениях нет очевидного недостающего ключевого слова. –

+0

Хорошо, это из-за синтаксиса, я написал тогда вместо Else. Итак, теперь у меня есть этот ORA-01427: однострочный подзапрос возвращает более одной строки – naouf3l