커서는 명시 적이거나 암시적일 수 있으며 FOR 루프에서 두 유형을 모두 사용할 수 있습니다. 귀하의 질문에는 실제로 두 가지 측면이 있습니다.
암시 적 커서 FOR 루프에 명시 적 커서 FOR 루프를 사용하는 이유는 무엇입니까?
- 조회를 재사용 할 때 명시 적 커서 FOR 루프를 사용하십시오. 그렇지 않으면 내재적 커서가 선호됩니다.
명시 적 FETCH가없는 FOR 루프 대신 FETCH가있는 루프를 사용하는 이유는 무엇입니까?
- 대량 수집이 필요하거나 동적 SQL이 필요한 경우 루프 내에서 FETCH를 사용하십시오.
다음은 설명서에서 유용한 정보입니다.
루프에 대한 암시 적 커서의 예
BEGIN
FOR vItems IN (
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name
)
LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
루프에 대한 명시 적 커서의 예
DECLARE
CURSOR c1 IS
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR vItems IN c1 LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
암시 적 커서
암시 적 커서는 PL / SQL에 의해 구성되고 관리되는 세션 커서입니다. PL / SQL은 SELECT 또는 DML 문을 실행할 때마다 암시 적 커서를 엽니 다. 암시 적 커서는 제어 할 수 없지만 해당 속성에서 정보를 얻을 수 있습니다.
연관된 명령문이 실행 된 후 내재 된 커서가 닫힙니다. 그러나 다른 SELECT 또는 DML 문이 실행될 때까지 속성 값을 계속 사용할 수 있습니다.
내재적 커서 속성은 SQL % ISOPEN, SQL % FOUND, SQL % NOTFOUND, SQL % ROWCOUNT, SQL % BULK_ROWCOUNT, SQL % BULK_EXCEPTIONS입니다.
명시 적 커서
명시 적 커서는 구성하고 관리하는 세션 커서입니다. 명시 적 커서를 선언하고 정의하여 이름을 지정하고이를 쿼리와 연관시켜야합니다 (일반적으로 쿼리는 여러 행을 리턴 함). 그런 다음 다음 방법 중 하나로 쿼리 결과 세트를 처리 할 수 있습니다.
OPEN 문을 사용하여 명시 적 커서를 열고, FETCH 문을 사용하여 결과 세트에서 행을 페치 한 후, CLOSE 문을 사용하여 명시 적 커서를 닫으십시오.
커서 FOR LOOP 문에 명시 적 커서를 사용하십시오 ( "커서 FOR LOOP 문을 사용한 쿼리 결과 세트 처리"참조).
명시 적 커서에 값을 지정하거나 표현식에 사용하거나 공식 서브 프로그램 매개 변수 또는 호스트 변수로 사용할 수 없습니다. 커서 변수로 이러한 작업을 수행 할 수 있습니다 ( "커서 변수"참조).
암시 적 커서와 달리 이름으로 명시 적 커서 또는 커서 변수를 참조 할 수 있습니다. 따라서 명시 적 커서 또는 커서 변수를 명명 된 커서라고합니다.
커서 FOR LOOP 문
커서 FOR LOOP 문을 사용하면 SELECT 문을 실행 한 후 결과 세트의 행을 즉시 반복 할 수 있습니다. 이 명령문은 내재적 커서 또는 명시 적 커서를 사용할 수 있습니다.
FOR
커서를 사용하는 또 다른 방법입니다. docs.oracle.com/cd/E11882_01/appdev.112/e10472 / ... 문서를 참조하십시오. 어쨌든 htp.prn ()은 무엇입니까?