Table Type 변수 ( Collection )

일반 프로그래밍 언어에서 사용하는 배열 타입을 pl/sql에서는 컬렉션이라고 한다.

 


 

[ 종류 ]

 

  • 연관 배열 ( associate array / index-by table )
    • 키와 값의 쌍으로 구성 된 컬렉션
    • java의 hash table과 같은 개념
      • key 데이터 유형 
        • 숫자 
          • binary_integer, pls_integer
          • number보다 작은 저장 영역 필요, 산술 연산의 경우 number보다 빠르다
        • 문자 : varchar2
      • value 유형
        • 일반 데이터 타입, 레코드 타입
        • 레코드 타입일 경우 여러개의 값을 가질 수 있다.

 

  • varray ( variable array )
    • 고정 길이를 가진 배열 ( 길이 명시 )
    • 일반 프로그래밍에서 사용되는 배열과 같다

 

  • 중첩 테이블 ( nested table )
    • varray와 흡사한 구조의 배열
    • 배열의 크기를 명시하지 않음, 동적으로 배열 크기 설정
    • 시작과 끝부분만 지정해주면 중간은 알아서

 

 

[ Table Type의 선언 형식 ]

 

  • 정의

TYPE 타입명 IS TABLE OF

employees.first_name%TYPE

INDEX BY BINARY_INTEGER;

 

  • 선언 (메모리 공간 확보)

식별자 타입명;

 

 


 

  • 예제 1

 

DECLARE
	tname varchar2(20);

	TYPE t_emp_name IS TABLE OF 
	EMPLOYEES.LAST_NAME%TYPE
	INDEX BY BINARY_INTEGER;

	v_name t_emp_name;

BEGIN 
	SELECT last_name INTO tname
	FROM EMPLOYEES e
	WHERE EMPLOYEE_ID = 100;

	v_name(0) := tname;
	dbms_output.put_line(v_name(0));
END;
/



- Output

 

  • 예제 2 ( 반복문 사용 )

 

DECLARE 
	TYPE tbl_type IS TABLE OF
	EMPLOYEES.LAST_NAME%TYPE 
	INDEX BY binary_integer;

	vtbl_type tbl_type;
	a binary_integer := 0;

BEGIN 
	FOR emp_name IN (SELECT last_name FROM EMPLOYEES e2) LOOP
		a := a + 1;
		vtbl_type(a) := emp_name.last_name;
	END LOOP;
	FOR i IN 1..a LOOP
		dbms_output.put_line(vtbl_type(i));
	END LOOP;
END;
/

 

- Output

 


 

바인드 변수 ( 비 pl/sql 변수 )

  • host 환경에서 생성되어 데이터를 저장하기 때문에 호스트 변수라고 한다. 
  • 키워드 VARIABLE를 이용하며, sql문이나 pl/sql블록에서도 사용 가능 
  • pl/sql 블록이 실행 된 후에도 액세스 가능 
  • print 명령을 이용하여 출력 가능 
  • :을 붙여 사용 

 

  • 예제

 

BEGIN 
	SELECT (SALARY * 12 + nvl(COMMISSION_PCT * SALARY, 0) INTO :vsal
	FROM EMPLOYEES e2
	WHERE EMPLOYEE_ID = 100;
END;
/


print vsal;


-- 이런게 있다는데.. 디비버에서 실행이 안된다;

 

복사했습니다!