2012-07-25 4 views
0

이것은 쿼리입니다. 커서로 문장 SELECT INTO을 바꾸는 방법은 무엇입니까?SELECT INTO 문을 커서로 바꿉니다. ORACLE

난 당신이 루프에서 여러 행을 처리하려는 경우, 그것은 간단

BEGIN 
    FOR curs IN (SELECT  ceq_liste_type_questions.id_liste_type_question 
       FROM  ceq_formulaires 
       INNER JOIN ceq_liste_type_questions ON ceq_liste_type_questions.id_liste_type_formulaire=ceq_formulaires.id_type_formulaire 
                AND ceq_liste_type_questions.webcode = 'ITEM_BETA_LACTAMASE' 
       WHERE  ceq_formulaires.id_formulaire = TO_NUMBER(out_rec.id_formulaire) 
       AND  ceq_formulaires.date_inactive IS NULL) 
    LOOP 
     DBMS_OUTPUT.PUT_LINE(curs.id_liste_type_question); -- do what you need to do 
    END LOOP; 
END; 
/

있어,

도와 주셔서 감사합니다

SELECT CEQ_LISTE_TYPE_QUESTIONS.ID_LISTE_TYPE_QUESTION 
     INTO vintIdListeTypeQuestion 
     FROM CEQ_FORMULAIRES 
     inner join CEQ_LISTE_TYPE_QUESTIONS 
      on CEQ_LISTE_TYPE_QUESTIONS.ID_LISTE_TYPE_FORMULAIRE=CEQ_FORMULAIRES.ID_TYPE_FORMULAIRE 
      AND CEQ_LISTE_TYPE_QUESTIONS.WEBCODE='ITEM_BETA_LACTAMASE' 
WHERE CEQ_FORMULAIRES.ID_FORMULAIRE=to_number(out_rec.ID_FORMULAIRE) 
and ceq_formulaires.date_inactive is null; 
+3

일반적으로 사람들은 그 반대를 원합니다. 귀하의 요구 사항은 무엇입니까? – RedFilter

+0

오류 때문에 http://www.techonthenet.com/oracle/errors/ora01422.php – FrankSharp

+0

즉, 1 행을 반환하도록 쿼리를 작성해야합니다. rownum <= 1은 임의의 행을 리턴하므로 사용하지 마십시오! – winkbrace

답변

3

오류로 인해 쿼리에서 둘 이상의 행이 반환되므로 필요한 행을 결정해야합니다. 여기 예제에서는 ceq_list_type_questions "some_date"에서 생각한 날짜 필드를 기반으로 가장 최근 행을 가져 오는 방법을 보여줍니다.

select max(q.id_liste_type_question) keep (dense_rank last order by q.some_date) into vintidlistetypequestion 
from ceq_formulaires f 
join ceq_liste_type_questions q on q.id_liste_type_formulaire = f.id_type_formulaire 
where f.id_formulaire = to_number(out_rec.id_formulaire) 
and f.date_inactive is null 
and q.webcode = 'ITEM_BETA_LACTAMASE' 
+1

윈도우 화 함수를 집계의 [FIRST] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions065.htm#i1000901) 수정 자와 혼합하면, 일하지 마라. windowing 함수 ('OVER' 포함)는 집계되지 않으므로 원본과 동일한 수의 행을 반환합니다. 'FIRST'의 정확한 신택스는'MAX (...) KEEP (DENSE_RANK FIRST ORDER BY YYY)' –

+0

입니다. Vincent에게 감사드립니다. 나는 내 대답을 편집했다. 나는 쿼리를 테스트하기 위해 테이블을 처음 만들 때 너무 게으른 편이었다. 우는 소리. – winkbrace

3

잘 오라클에 안돼서 그러나 BazzPschoNut에 언급 된 것처럼, SQL이 단일 행에서 반환/작동해야하는 경우 쿼리를 수정하여 해당 요구 사항을 충족시켜야합니다.