PL/SQL의 커서는 SQL Query의 결과 세트에서 데이터 행을 행으로 처리하는 메커니즘을 제공합니다. 결과 세트에 대한 포인터 역할을하여 개별 행을 가져오고 조작 할 수 있습니다. 커서를 사용하려면 먼저 선언 한 다음 쿼리를 실행하여 한 번에 하나씩 행을 가져와 마침내 닫습니다. 다음은 고장입니다.
선언 : CURSOR
키워드를 사용하여 커서를 선언 한 다음 이름과 SQL 쿼리가 이어집니다. 쿼리는 처리하는 데 필요한 열을 선택해야합니다.
<code class="sql">DECLARE CURSOR emp_cursor IS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 10; BEGIN -- Cursor operations will go here END; /</code>
개방 : OPEN
문은 커서와 관련된 쿼리를 실행하고 첫 번째 행 앞에 커서를 배치합니다.
<code class="sql">OPEN emp_cursor;</code>
Fetching : FETCH
문은 결과 세트에서 행을 검색하고 값을 변수로 배치합니다. 커서 쿼리에서 선택한 열의 데이터 유형과 일치하는 변수를 선언해야합니다.
<code class="sql">DECLARE employee_id employees.employee_id%TYPE; last_name employees.last_name%TYPE; salary employees.salary%TYPE; CURSOR emp_cursor IS ...; -- as declared above BEGIN OPEN emp_cursor; LOOP FETCH emp_cursor INTO employee_id, last_name, salary; EXIT WHEN emp_cursor%NOTFOUND; -- Process the fetched row here DBMS_OUTPUT.PUT_LINE('Employee ID: ' || employee_id || ', Name: ' || last_name || ', Salary: ' || salary); END LOOP; CLOSE emp_cursor; END; /</code>
마감 : CLOSE
명세서는 커서가 보유한 리소스를 출시합니다. 자원 누출을 방지하기 위해 커서를 닫는 것이 중요합니다.
<code class="sql">CLOSE emp_cursor;</code>
emp_cursor%NOTFOUND
속성은 각 FETCH
후에 확인됩니다. 더 이상 행을 사용할 수 없으면 TRUE
되어 루프가 끝납니다. 이것은 커서에 의해 반환 된 행을 통해 반복하는 표준 방법입니다.
PL/SQL은 각각 강점과 약점을 가진 여러 유형의 커서를 제공합니다.
SELECT INTO
문을 실행할 때 PL/SQL에 의해 자동으로 생성됩니다. 그들은 프로그래머로부터 숨겨져 있으며 PL/SQL 엔진에 의해 자동으로 관리됩니다. 단일 행을 검색하는 간단한 쿼리에 사용하십시오. 쿼리가 둘 이상의 행을 반환하면 TOO_MANY_ROWS
예외가 발생합니다.선택은 귀하의 요구에 따라 달라집니다. 간단한 단일 줄 검색에 암시 적 커서 사용, 명확한 제어 기능을 갖춘보다 복잡한 멀티 랑 처리를위한 명백한 커서, 동적 SQL 및 프로 시저/기능 매개 변수 통과를위한 Cursors.
커서로 대형 데이터 세트를 처리하는 것은주의 깊게 처리하지 않으면 비효율적 일 수 있습니다. 성능 향상을위한 몇 가지 전략은 다음과 같습니다.
FORALL
문과 같은 기술을 사용하여 한 번에 여러 행에서 작업을 수행합니다. 이는 PL/SQL 엔진과 데이터베이스 서버 간의 컨텍스트 전환을 크게 줄입니다.SELECT *
피하고 대신 필요한 열만 지정하십시오. 클로스가 데이터를 효과적으로 필터링하기 위해 적절한 WHERE
사용하십시오. 예, 코드를 단순화하고 가독성을 향상시키기 위해 커서가있는 FOR
에 사용할 수 있습니다. FOR
루프는 암시 적으로 커서의 개구부, 가져 오기 및 폐쇄를 처리하여 코드를보다 간결하고 이해하기 쉽게 만듭니다. 이것은 명백한 커서를 다룰 때 특히 유익합니다.
이전에 표시된대로 수동 LOOP
및 FETCH
대신 다음을 사용할 수 있습니다.
<code class="sql">DECLARE CURSOR emp_cursor IS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 10; BEGIN FOR emp_rec IN emp_cursor LOOP DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_rec.employee_id || ', Name: ' || emp_rec.last_name || ', Salary: ' || emp_rec.salary); END LOOP; END; /</code>
루프 FOR
경우 자동으로 커서 반복을 처리합니다. emp_rec
레코드 변수는 커서에서 가져온 각 행의 값을 자동으로 수신합니다. 이 접근법은 커서를 수동으로 관리하는 것과 비교할 때 더 깨끗하고 읽기 쉬우 며 오류가 덜 발생합니다. PL/SQL에서 대부분의 커서 기반 행 처리에 선호되는 방법입니다.
위 내용은 PL/SQL에서 커서를 사용하여 여러 행의 데이터를 처리하려면 어떻게합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!