오라클 cursor 예제

커서는 쿼리의 결과를 가리키는 포인터입니다. PL/SQL에는 암시적 커서와 명시적 커서의 두 가지 유형의 커서가 있습니다. 쿼리에서 모든 행을 가져올 때 루프의 본문이 하나 이상의 DML 문을 실행하지 않는 한 CURSOR FOR 루프를 사용합니다(INSERT, UPDATE, DELETE 또는 MERGE). 이러한 경우, 대량 수집 및 FORALL로 전환 하려는 것입니다. 커서 (변수)에서 하나 이상의 변수로 FETCH (커서 변수로 FETCH-BULK COLLECT INTO, 여러 행으로 컬렉션을 채우는 것까지 할 수 있습니다) 코드 목록 2: 커서 변수를 반환하는 name_for 함수의 블록 및 설명 커서 FOR 루프에 대한 좋은 점은 Oracle Database커서를 열고 커서에 대해 %ROWTYPE을 사용하여 레코드를 선언하고 각 행을 레코드로 가져온 다음 모든 행이 인출될 때 루프를 닫는 것입니다 (또는 루프가 다른 이유로 종료됩니다). . 단일 행을 가져올 때 SELECT-INTO 를 사용하거나 즉시 실행을 실행합니다(쿼리가 동적인 경우). 명시적 커서 또는 CURSOR FOR 루프를 사용하지 마십시오. 여기서 cursor_name은 명시적 커서의 이름입니다. 명령문에 명시적 커서를 사용하지 않는 경우 SQL 문이 실행되는 동안 Oracle에서 암시적 커서가 자동으로 생성됩니다. 커서를 닫으면 오라클은 적절한 시기에 할당된 메모리를 해제하도록 지시합니다.

커서에 대한 메모리를 할당하고 SQL 문에서 반환된 행을 쉽게 가져올 수 있도록 하는 데 사용됩니다. INNER JOIN 절을 사용하여 직원 및 부서 테이블에서 데이터를 검색하고 cur_chief 커서를 이 결과 집합으로 설정했습니다. 이 문서에서는 암시적 및 명시적 커서의 성능을 비교합니다. 이 테스트는 DBMS_UTILITY를 사용합니다. GET_TIME 함수는 테스트 전후의 현재 시간을 얻고 델타 값은 1초의 백분의 경과 시간을 나타냅니다. 쿼리에서 행을 식별하지 않으면 Oracle Database에서 NO_DATA_FOUND를 발생시키지 않습니다. 대신 cursor_name%NOTFOUND 특성이 TRUE를 반환합니다. 명시적 커서를 사용하기 전에 아래와 같이 블록 또는 패키지의 선언 섹션에서 선언해야 합니다. 그런 다음 커서가 완료되면(또는 예외가 발생할 때) 커서를 닫습니다. SELECT 문이 가져올 행을 두 개 이상 식별하는 경우 Oracle Database는 TOO_MANY_ROWS 예외를 발생시게 됩니다.

This entry was posted in Non classé. Bookmark the permalink.

Comments are closed.