2013-08-08 3 views
-1
Declare 
    type v_year_arr is varray(100) of emps%rowtype; 
    v_deptid emps.department_id%type :=90; 
    v_rem1 number(5,2); 
    v_rem2 number(5,2); 
    v_rem3 number(5,2); 
    v_year v_year_arr; 
Begin 
    select * bulk collect into v_year from emps where department_id = v_deptid; 
    v_rem1 := MOD(v_year.yof,4); 
    v_rem2 := MOD(v_year.yof,100); 
    v_rem3 := MOD(v_year.yof,400); 
    for i..v_year loop 
     If (v_rem1=0 and v_rem2=0 and v_rem3=0) 
     then 
     DBMS_OUTPUT.PUT_LINE('Leap year :'||v_year.yof); 
     else 
     DBMS_OUTPUT.PUT_LINE('Not a Leap year :'||v_year.yof) 
     End if; 
    end loop; 
end; 
+1

"v_year.yof"가 무엇인지 설명하십시오. – alexs

+1

질문을 편집하고 오류 메시지의 정확한 텍스트, 신고 된 라인의 표시 등과 같은 추가 정보를 포함하십시오. 감사합니다. –

답변

2

나는 당신이이 같이 루프에 대한 커서를 사용하여 작성하는 더 나을 거라고 생각 :

Declare 
    v_deptid emps.department_id%type :=90; 
    v_rem1 number(5,2); 
    v_rem2 number(5,2); 
    v_rem3 number(5,2); 
Begin 
    FOR aRow IN (select * from emps where department_id = v_deptid) 
    LOOP 
    v_rem1 := MOD(aRow.yof,4); 
    v_rem2 := MOD(aRow.yof,100); 
    v_rem3 := MOD(aRow.yof,400); 

    If (v_rem1=0 and v_rem2<>0) or (v_rem2=0 and v_rem3=0) then 
     DBMS_OUTPUT.PUT_LINE('Leap year :'||aRow.yof); 
    else 
     DBMS_OUTPUT.PUT_LINE('Not a Leap year :'||aRow.yof) 
    End if; 
    end loop; 
end; 

이에 의해 반환 된 100 개 이상의 행을 가지고있는 잠재적 인 문제를 제거 SELECT...BULK COLLECT INTO... 성명 나는 또한 윤년 결정을 수정하는 자유를 취했습니다.

공유하고 즐기십시오.