반응형
예외에서 루프를 계속할 수 있습니까?
루프 내에서 가져오기가 실행되고 있습니다.이 가져오기가 실패하면(데이터 없음) 하고 싶습니다.CONTINUE
내부에서 다음 레코드로 루프합니다.EXCEPTION
.
이것이 가능합니까?
나는 받는 중입니다.ORA-06550
&PLS-00201 identifer CONTINUE must be declared
DECLARE
v_attr char(88);
CURSOR SELECT_USERS IS
SELECT id FROM USER_TABLE
WHERE USERTYPE = 'X';
BEGIN
FOR user_rec IN SELECT_USERS LOOP
BEGIN
SELECT attr INTO v_attr
FROM ATTRIBUTE_TABLE
WHERE user_id = user_rec.id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- user does not have attribute, continue loop to next record.
CONTINUE;
END;
END LOOP;
END;
그CONTINUE
문은 11g의 새로운 기능입니다.
다음은 관련 질문입니다. Oracle 10g PL/SQL의 'CONTINUE' 키워드입니다.
제공한 구성에서 계속은 필요하지 않습니다.예외가 처리되면 EXECUMENT 블록이 절차를 종료하지 않는다고 가정하여 종료 후 문이 수행됩니다.즉, user_rec 루프의 다음 반복으로 계속됩니다.
또한 BEGIN 블록 내부의 변수를 선택해야 합니다.
SELECT attr INTO v_attr FROM attribute_table...
v_attr도 선언해야 합니다...
올레고투 스테이트먼트는 어떻습니까? (알아요, 알아요, 하지만 여기서는 잘 작동해요;
DECLARE
v_attr char(88);
CURSOR SELECT_USERS IS
SELECT id FROM USER_TABLE
WHERE USERTYPE = 'X';
BEGIN
FOR user_rec IN SELECT_USERS LOOP
BEGIN
SELECT attr INTO v_attr
FROM ATTRIBUTE_TABLE
WHERE user_id = user_rec.id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- user does not have attribute, continue loop to next record.
goto end_loop;
END;
<<end_loop>>
null;
END LOOP;
END;
물론 end_loop은 루프의 맨 끝에 놓으십시오.null은 커밋 또는 카운터 증분으로 대체할 수 있습니다.
이 예에서는 외부 조인을 사용해야 합니다.
declare
begin
FOR attr_rec IN (
select attr
from USER_TABLE u
left outer join attribute_table a
on ( u.USERTYPE = 'X' and a.user_id = u.id )
) LOOP
<process records>
<if primary key of attribute_table is null
then the attribute does not exist for this user.>
END LOOP;
END;
사용할 수 있는 공지사항WHEN exception THEN NULL
당신이 사용하는 것과 같은 방법WHEN exception THEN continue
예:
DECLARE
extension_already_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(extension_already_exists, -20007);
l_hidden_col_name varchar2(32);
BEGIN
FOR t IN ( SELECT table_name, cast(extension as varchar2(200)) ext
FROM all_stat_extensions
WHERE owner='{{ prev_schema }}'
and droppable='YES'
ORDER BY 1
)
LOOP
BEGIN
l_hidden_col_name := dbms_stats.create_extended_stats('{{ schema }}', t.table_name, t.ext);
EXCEPTION
WHEN extension_already_exists THEN NULL; -- ignore exception and go to next loop iteration
END;
END LOOP;
END;
언급URL : https://stackoverflow.com/questions/5903027/is-it-possible-to-continue-a-loop-from-an-exception
반응형
'programing' 카테고리의 다른 글
이미지 크기를 가져오려면 Python OpenCV2(cv2) 래퍼를 선택하시겠습니까? (0) | 2023.07.21 |
---|---|
파이어스토어 문서에서 중첩된 오브젝트의 필드를 업데이트하시겠습니까? (0) | 2023.07.21 |
메모리를 2의 거듭제곱으로 할당하는 것이 더 나을까요? (0) | 2023.07.16 |
MongoDB를 사용하여 관계형 데이터베이스를 만들 수 있습니까? (0) | 2023.07.16 |
펠리컨 3.3 펠리컨-퀵 스타트 오류 "값 오류: 알 수 없는 로케일: UTF-8" (0) | 2023.07.16 |