Articles

Oracle PL/SQL Cursor:암시적,명시적,커서를 위한 루프[예]

는 무엇입 커서를 PL/SQL?

커서는이 컨텍스트 영역에 대한 포인터입니다. Oracle 은 문에 대한 모든 정보가 포함 된 SQL 문을 처리하기위한 컨텍스트 영역을 만듭니다.

PL/SQL 을 사용하면 프로그래머가 커서를 통해 컨텍스트 영역을 제어 할 수 있습니다. 커서는 SQL 문에 의해 반환 된 행을 보유합니다. 커서가 보유하는 행 집합을 활성 집합이라고합니다., 이러한 커서는 코드의 다른 위치에서 참조 할 수 있도록 이름을 지정할 수도 있습니다.

이 튜토리얼에서 당신 배우-

  • 암시적 커서
  • 명시적 커서
  • 커서 속성
  • 루 커서를 문

커서의 두 가지 유형이 있습니다.

  • 암시적 커서
  • 명시적 커서

암시적 커서

때마다 어떤 DML 작업에서 발생하는 데이터베이스 암시적 커서 만들어 보유하는 행 영향을 받는 특별한 작업입니다., 이러한 커서는 이름을 지정할 수 없으므로 코드의 다른 위치에서 제어하거나 참조 할 수 없습니다. 커서 속성을 통해 가장 최근의 커서만을 참조 할 수 있습니다.

명시적 커서

프로그래머들을 만들 수 있는 이라는 컨텍스트의 지역을 실행하신 데이터를 얻을 제어합니다. 명시 적 커서는 PL/SQL 블록의 선언 섹션에 정의되어야하며 코드에서 사용해야하는’SELECT’문에 대해 작성됩니다. 다음은 명시 적 커서 작업과 관련된 단계입니다.,

  • 선언하면 커서

    선언하면 커서 단순히 의미를 만들 중 하나라는 컨텍스트를 위한 지역을’선택’문에서 정의된 선언서 부분입니다. 이 컨텍스트 영역의 이름은 커서 이름과 동일합니다.

  • 커서 열기

    커서를 열면 PL/SQL 에서이 커서에 대한 메모리를 할당하도록 지시합니다. 그것은 레코드를 가져올 준비가 커서를 만들 것입니다.

  • 가져오는 데이터에서 커서

    이 과정에서,’선택’문을 실행하고 행 억지에 저장 할당되는 메모리., 이들은 이제 활성 세트로 불린다. 에서 데이터를 가져 오는 커서가 기록적 수준의 활동을 의미한 우리는 데이터에 액세스할 수 있습에서 기록적으로 녹음 방법입니다.

    각 fetch 문은 하나의 활성 세트를 가져오고 해당 특정 레코드의 정보를 보유합니다. 이 명령문은 레코드를 가져 와서’IN’절의 변수에 할당하는’SELECT’명령문과 동일하지만 예외는 발생하지 않습니다.

  • 닫 커서

    모든 기록을 가져 이제는 우리가 해야 가까이 커서를 그래서 메모리를 할당한 이 상황 지역 해제됩니다.,

Syntax:

  • 위에 구문,선언서 부분은 선언을 포함하의 커서를 그리고 커서 변수에서 가져온 데이터 할당됩니다.
  • 커서 선언에 주어진’SELECT’문에 대해 커서가 생성됩니다.
  • 실행 부분에서 선언 된 커서가 열리고 페치되고 닫힙니다.

커서 속성

암시 적 커서와 명시 적 커서 모두 액세스 할 수있는 특정 속성이 있습니다. 이러한 특성은 커서 작업에 대한 자세한 정보를 제공합니다., 아래는 다른 커서 속성과 그 사용법입니다.

커서 속성 Description
%을 발견 그것을 반환합니다 Boolean 결과’TRUE’는 경우 가장 최근의 가동을 가져 기록을 성공적으로,다른 것이는 FALSE 를 반환합니다.
%DATA. 이 작품이 반대로를%찾을 반환됩니다’TRUE’는 경우 가장 최근의 가져오기 작업할 수 있지 않을 가져올 수 있는 모든 기록입니다.,
%ISOPEN 반환 Boolean 결과’TRUE’는 경우 주서 커서 이미 열려 있고,다른 반환’FALSE’
%ROWCOUNT 그것을 반환합니다 숫자 값입니다. DML 활동의 영향을받은 실제 레코드 수를 제공합니다.

예제 1:이 예제에서,우리가 선언하는 방법,열,가을 닫고 명시적이 됩니다.

커서를 사용하여 emp 테이블에서 모든 직원의 이름을 투영합니다., 또한 커서 속성을 사용하여 커서에서 모든 레코드를 가져 오도록 루프를 설정합니다.

출력

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3

코드 설명:

  • 코드 line2:을 선언하는 커서 guru99_det 에 대한 문’을 선택 emp_name 시애틀에서’.
  • 코드 라인 3:변수 Lv_emp_name 선언.
  • 코드 줄 5:커서 열기 guru99_det.
  • 코드 줄 6:’emp’테이블의 모든 레코드를 가져 오도록 기본 루프 문을 설정합니다.,
  • 코드 줄 7:guru99_det 데이터를 가져 와서 값을 lv_emp_name 에 할당합니다.
  • 코드 행 9:커서 속성’%NOTFOUND’를 사용하여 커서의 모든 레코드가 페치되는지 여부를 찾습니다. 는 경우 가져온 다음이 반환됩니다’TRUE’와 제어 루프에서 종료,다른 통제 유지에 가져오는 데이터에서 커서와 데이터를 인쇄.
  • 코드 라인 11:루프 문에 대한 종료 조건.
  • 코드 줄 12:가져온 직원 이름을 인쇄하십시오.,
  • 코드 줄 14:커서 속성’%ROWCOUNT’를 사용하여 커서에서 영향을 받거나 가져온 총 레코드 수를 찾습니다.
  • 코드 줄 15:루프에서 종료 한 후 커서가 닫히고 할당 된 메모리가 자유롭게 설정됩니다.

For Loop 커서 문

“FOR LOOP”문은 커서 작업에 사용할 수 있습니다. 우리가 줄 수 있는 커서 대신 이름의 범위는 제한에 대한 반복 문장 그래서 루프 작업에서 첫 번째 레코드의 커서를 마지막 기록의 커서입니다., 커서 변수,커서 열기,커서 가져 오기 및 닫기는 FOR 루프에 의해 암시 적으로 수행됩니다.

구문:

DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
  • 위의 구문에서 선언 부분에는 커서의 선언이 포함됩니다.
  • 커서 선언에 주어진’SELECT’문에 대해 커서가 생성됩니다.
  • 실행 부분에서 선언 된 커서는 FOR 루프에서 설정되고 루프 변수’I’는이 경우 커서 변수로 동작합니다.,

예제 1:이 예에서는 커서 용 루프를 사용하여 emp 테이블의 모든 직원 이름을 투영합니다.

출력

Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY

코드 설명:

  • 코드 line2:을 선언하는 커서 guru99_det 에 대한 문’을 선택 emp_name 시애틀에서’.
  • 코드 라인 4:루프 변수 lv_emp_name 을 사용하여 커서에 대한’FOR’루프 구성.
  • 코드 줄 5:루프의 각 반복에서 직원 이름을 인쇄합니다.,
  • 코드 8:Exit loop

참고:커서를 위한 루프,커서 속성을 사용할 수 없습 열기 때문에,페치고 커서를 암시적으로 실행한다.