핵심정리
1 집합적 언어인 SQL은 한 번에 여러 로우를 처리하는 것이 기본이지만, 커서를 사용하면 한 로우씩 개별적으로 접근할 수 있다.
2 PL/SQL 블록 내에서 사용하는 모든 SQL 문장이 실행될 때마다 내부적으로 커서가 만들어지는데 이를 묵시적 커서라 한다. 이와는 달리 사용자가 직접 커서를 정의하고 사용하는 것을 명시적 커서라 한다.
3 커서의 생애는 “커서 선언 - 커서 오픈 - 커서 패치 - 커서 닫기”로 이루어 진다.
4 커서를 이용해 테이블의 로우에 개별적으로 접근할 때는 반복문이 함께 사용된다.
5 커서에 대한 내부적인 여러 가지 정보는 커서 속성으로 얻어낼 수 있다.
6 커서에 대해서도 변수를 선언해 사용할 수 있는데, 이를 커서 변수라 한다. 커서 변수를 사용하려면 먼저 “TYPE … IF REF CURSOR ….” 구문으로 커서 타입을 선언한 뒤, 이 타입에 대한 변수를 선언해 사용한다. 또한, 오라클에서 제공하는 빌트인 커서 타입인 SYS_REFCURSOR를 사용하면 별도의 선언 과정은 필요 없다.
7 레코드는 다른 유형의 데이터 타입이 연결된 복합 데이터 유형으로 테이블과 그 구조가 유사한데, 테이블과는 달리 로우 수는 단 1개 뿐이다.
8 레코드는 그 형태와 쓰임새에 따라 사용자 정의 레코드, 테이블형 레코드, 커서형 레코드로 나눌 수 있으며, 레코드의 한 필드의 데이터 타입이 또 다른 레코드인 중첩 레코드도 있다.
9 컬렉션은 레코드를 확장한 데이터 타입으로 연관 배열, VARRAY, 중첩 테이블이 있다.
10 연관 배열은 ‘키-값’ 쌍으로 구성되는 컬렉션으로 키를 인덱스라고도 하며 문자형과 숫자형 인덱스를 만들 수 있다. 또한 선언할 때 크기 제한이 없어 동적으로 크기가 늘어난다.
11 VARRAY는 인덱스와 값으로 이루어지는 컬렉션으로 선언할 때 설정한 크기를 넘을 수 없으며 숫자형 인덱스만 만들 수 있다.
12 중첩 테이블 역시 VARRAY와 비슷하지만 크기 제한이 없다는 점이 다르며 VARRAY보다 확장성이 크다.
13 컬렉션 타입 중 VARRAY와 중첩 테이블은 일반 테이블의 컬럼 타입으로 사용할 수 있고 사용자 정의 타입으로도 사용할 수 있다.