2016-10-20 1 views
0

나는 PL/SQL을 받고 있어요 : ORA-00905를 :없는 키워드 오류가 난 다음 스크립트를oracle의 where 절에서 case 문을 사용하는 방법은 무엇입니까?

create or replace procedure testing 
(ass_line in char, 
curs out sys_refcursor 
) 
is 
begin 
open curs for 
select asl.Production_Group,asl.last_sequence_nbr 
from ASSEMBLY_LINE asl 
where(case 
    when ass_line='551F' 
    then asl.assembly_line in('551F','551C','551S') 
    else 
    asl.assembly_line=ass_line 
    end); 
end; 

을 실행할 때, 당신은 or를 사용해야합니다 당신은 그런 case을 사용할 수 없습니다

+3

, 문 –

+0

@Nicholas Krasnov for' 커서 변수를 사용하는 '열린 into''선택 허용하지 않는다. 답장을 보내 주셔서 감사합니다. 내 게시물을 업데이트했습니다. 게시물에 언급 된대로 프로 시저를 실행하지만 프로 시저를 컴파일 할 때 키워드가 누락되었습니다. – BabyboBNukes

+0

Tony 또는 David의 답변을 참조하십시오. –

답변

5

실제로 where 절에서 case 문을 사용해야하는 사람들에게 해당됩니다. 그렇다 의미 잘못된`case` 표현에서

where (case 
      when ass_line = '551F' then 
      case 
       when asl.assembly_line in ('551F', '551C', '551S') then 
       1 
       else 
       0 
      end 
      else 
      case 
      when asl.assembly_line = ass_line then 
       1 
      else 
      0 
      end 
     end) = 1 
+0

두 번째 else 이후에 CASE/END 키워드가 누락되었습니다. – schurik

+0

실수를 지적 해 주셔서 감사합니다. 예제를 편집했습니다. – Rene

+0

@Rene. 답장을 보내 주셔서 감사합니다. 작동합니다. 끝에서 "끝"= 1 "에 대해 말해 줄 수 있습니까? 와트는 atlast에서 1이 지정되면 발생합니까? 와트는 1을 대표합니까? – BabyboBNukes

3

을 저를 도와주세요 :

select asl.Production_Group,asl.last_sequence_nbr 
from ASSEMBLY_LINE asl 
where( (ass_line='551F' and asl.assembly_line in('551F','551C','551S') 
    or (asl.assembly_line=ass_line) 
    ); 
+0

답장을 보내 주셔서 감사합니다. 그러나 같은 오류를 보여줍니다. – BabyboBNukes

+0

커서 변수를 선택할 수 없기 때문에 (질문에 대한 Nicholas의 설명 참조) –

+0

. 중첩 테이블을 사용할 수 있습니까? – BabyboBNukes

3

당신이 사용되어야한다 :

where (ass_line = '551F' and asl.assembly_line in('551F','551C','551S')) or 
     (ass_line != '551F' and asl.assembly_line = ass_line)