2009-12-03 5 views
3

가 :오라클 케이스에는 INTO가 필요합니까? 나는 다음과 같은 시도 할 때

declare var_type VARCHAR2(10); 

begin 

    var_type := 'B'; 

    select case var_type 
      when 'B' then 'Beans' 
      when 'L' then 'Legumes' 
     end 
    from tableOfBeans ; 

end; 

내가

ORA-06550를 말하는 오류 : 선 4, 열 1 :
은 PLS-00428 : INTO 절은이 SELECT 예상됩니다 문
오류 위치 #에서 감지 : 62

하지만 var_type를 사용하는 대신 컨디셔너로 'B'를 사용하지 않는 경우 그것은 잘 작동합니다. 아무도 왜 이런 일이 일어나는 지 말해 줄 수 있습니까? 그리고 나는 그것을 어떻게 고쳐서 var_type을 올바르게 사용할 수 있습니까?

답변

5

시작/끝 블록에 SQL을 래핑하면 PL-SQL 문이됩니다. PL-SQL에서 오라클은 SQL의 결과 집합을 넣을 곳을 기대하고 있습니다. ORA-06550 오류의 원인입니다. INTO를 통해 쿼리의 결과를 보유하도록 선언 된 PL-SQL 변수가 필요합니다.

그러나 SELECT 문은 여전히 ​​조금 이상합니다. 당신이 가지고있는 방식대로, FROM 절에 실제 테이블 "tableOfBeans"를 갖는 것이 중요하지 않습니다.

원하십니까?

declare var_type VARCHAR2(10); 

begin 

    select case tableOfBeans.beanType 
       when 'B' then 'Beans' 
       when 'L' then 'Legumes' 
      end 
     into var_type 
     from tableOfBeans; 

end; 

사실, tableOfBeans에 둘 이상의 행이있는 경우 실제로 오류가 발생합니다. tableOfBeans.beanType = var_type 인 tableOfBeans에서 항목을 검색하는 것이 좋습니다. 이 경우 결과 세트를 저장하는 방법이 필요합니다. 미안하지만 네가하려는 일을 이해하지 못한다면. 좀 더 자세한 내용이 도움이 될 것입니다.

1

CASE 문에는 INTO이 필요하지 않습니다.
ORA-6550 is a generic error에 대한 SQL 컴파일되지 않습니다. ,

SELECT t.column 
    INTO var_type 
    FROM tableOfBeans 

은 내가 오라클에 대해 테스트를 설치하지 않아도 : 오류는 당신이처럼 SELECT INTO 문을 수행하기 위해 노력하고 생각하기 때문에 문제가 더 INTO 조항이 없다되고 생각하는 것을보고 하지만 Oracle 9i/10g가 CASE 문과 함께 이상하게 느껴지는 경우가 있는데, 가끔 END이 아닌 END CASE을 사용해야하는 경우가 있습니다. END CASEmentioned in the Oracle documentation here입니다. 오류 전에 대답으로

var_type := 'B'; 

SELECT CASE var_type 
     WHEN 'B' then 'Beans' 
     WHEN 'L' then 'Legumes' 
     END CASE 
    FROM DUAL; 
+0

사례 ..END CASE는 PL/SQL이고, CASE..END는 SQL입니다. –

0

당신이로 선택 의 결과를 넣을 필요가 있다고 말한다 :

는 보통 변수가 설정되어있는 경우 테스트, 이런 종류의 듀얼을 사용하십시오 변하기 쉬운.

declare 
    var_type VARCHAR2(10); 
    var_into VARCHAR2(10); 
begin 
    var_type := 'B'; 

    select case var_type 
      when 'B' then 'Beans' 
      when 'L' then 'Legumes' 
    end 
    into var_into 
    from tableOfBeans; 
end; 

테이블의 tableOfBeans가 다른 오류 ORA-01422로 실행됩니다 둘 이상의 행이 포함 된 경우 : 정확한 하나의 행보다 더 많은 수익을 가져 오기를. 대신 가상 테이블 이중을 사용하거나 pl/sql 코드를 사용하십시오.

declare 
    var_type VARCHAR2(10); 
    var_into VARCHAR2(10); 
begin 
    var_type := 'B'; 

    var_into := case var_type 
      when 'B' then 'Beans' 
      when 'L' then 'Legumes' 
    end; 
end;