获取'ORA-01427:单行子查询返回多行'错误

时间:2014-08-29 20:58:27

标签: sql oracle

当我尝试在没有大小写的情况下执行此代码时,只需...和TRANSFORMER IN(SELECT REGEXP_SUBSTR ...)就可以了。但是,如果TID为NULL,则添加案例以获取所有内容会给我错误..

(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
  )
 );

1 个答案:

答案 0 :(得分:2)

case语句不返回变量列表。也不是,第一部分是否符合您的想法。以下是我认为你想要的逻辑:

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
                        )
      )