2014-08-29 6 views
0

Когда я пытаюсь выполнить этот код без случая и так же, как ... и TRANSFORMER IN (SELECT REGEXP_SUBSTR ...), он работает. Однако добавление случая, чтобы захватить все, если TID является NULL дает мне ошибку ..Получение ORA-01427: однострочный подзапрос возвращает более одной строки Ошибка

(select t.DAY_DATE as D, t.* from pplco_transformer_kva t where 

--NORMALLY '03-MAR-14' IS A VARIABLE 
DAY_DATE = TO_DATE('03-MAR-14')and TRANSFORMER IN(

    --NORMALLY '26113S36753,25761S36662' IS A VARIABLE 
    CASE WHEN '26113S36753,25761S36662' IS NULL THEN(

    (t.TRANSFORMER) 

)ELSE(
    SELECT REGEXP_SUBSTR('26113S36753,25761S36662', '[^,]+', 1,LEVEL) 
    FROM DUAL CONNECT BY 
    regexp_substr('26113S36753,25761S36662', '[^,]+', 1, level) is 
    not null) 
    END 
) 
); 
+0

Вы пытались выполнить 'выберите REGEXP_SUBSTR() из dual' только и посмотреть, если это ожидаемый результат? –

ответ

2

Дело заявление не возвращает список переменных. Кроме того, первая часть делает то, что вы думаете. Ниже логику, я думаю, что вы хотите:

where DAY_DATE = TO_DATE('03-MAR-14') and 
     ('26113S36753,25761S36662' IS NULL OR 
     '26113S36753,25761S36662' IS NOT NULL AND 
     t.TRANSFORMER IN (SELECT REGEXP_SUBSTR('26113S36753,25761S36662', '[^,]+', 1,LEVEL) 
         FROM DUAL CONNECT BY 
         regexp_substr('26113S36753,25761S36662', '[^,]+', 1, level) is not null 
         ) 
    ) 
+0

То, что мне нужно. Благодаря! – wbrugato

Смежные вопросы