Table Type 변수 ( Collection )
일반 프로그래밍 언어에서 사용하는 배열 타입을 pl/sql에서는 컬렉션이라고 한다.
[ 종류 ]
- 연관 배열 ( associate array / index-by table )
- 키와 값의 쌍으로 구성 된 컬렉션
- java의 hash table과 같은 개념
- key 데이터 유형
- 숫자
- binary_integer, pls_integer
- number보다 작은 저장 영역 필요, 산술 연산의 경우 number보다 빠르다
- 문자 : varchar2
- 숫자
- value 유형
- 일반 데이터 타입, 레코드 타입
- 레코드 타입일 경우 여러개의 값을 가질 수 있다.
- key 데이터 유형
- 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;
-- 이런게 있다는데.. 디비버에서 실행이 안된다;
'SQL' 카테고리의 다른 글
[Oracle] PL/SQL 반복문 (Loop, While, For Loop, Continue) (0) | 2020.07.06 |
---|---|
[Oracle] PL/SQL 조건문 (if문, case문) (0) | 2020.07.06 |
[Oracle Error] Got minus one from a read call (0) | 2020.06.14 |
[Oracle] PL/SQL ( Procedural Language for SQL ) (0) | 2020.06.14 |
[Oracle] 오라클 시퀀스 ( Sequence ) (0) | 2020.06.07 |