DataBase/Oracle
16. Oracle 콜렉션,바인드 함수
유가엘
2020. 4. 2. 17:00
콜렉션 함수란?
일반 프로그래밍 언어에서 사용하는 배열 타입을 PL/SQL 에서는 콜렉션이라고 합니다.
연관 배열(Associative Array)
정의
Java의 Hash-Map 과 같이 키와 값으로 구성되어있는 콜렉션입니다.
키값을 Index라고 하기 때문에 Index-By Table 이라고 합니다.
키값으로는 숫자가 들어가며 , Binary_Integer , Pls_Integer 가 들어 갑니다.
위 값은 Number 보다 작은 저장영역을 사용하여 산술 연산 시 보다 빠릅니다.
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
WHERE employee_id =100;
v_name(0) := tname;
dbms_output.put_line(v_name(0));
END;
/
-----------------------------------------------------------
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 i in (select last_name from employees) LOOP
a:= a+1;
vtbl_type(a):=i.last_name;
END LOOP;
FOR j in 1..a LOOP
dbms_output.put_line(vtbl_type(j));
END LOOP;
END;
/
가변 길이 배열 (VARRY, Variable-Size Array)
Java의 배열과 같이 사용하는 콜렉션이며, 고정 길이를 가집니다.
DECLARE
TYPE va_type IS VARRAY(5) OF VARCHAR2(20);
va_array va_type;
BEGIN
va_array := va_type('1', '2', '3', '', '');
FOR i IN 1..5 LOOP
dbms_output.put_line(vva_test(i));
END LOOP;
END;
중첩 테이블 (Nested Table)
VARRY와 비슷한 콜렉션이지만, 동적으로 크기가 증가됩니다.
DECLARE
TYPE nt_tbl IS TABLE OF VARCHAR2(10);
v_test nt_typ;
BEGIN
v_test := nt_tbl('1', '2', '3');
FOR i IN 1..3 LOOP
dbms_output.put_line(v_test(i));
END LOOP;
END;
바인드 변수 (비 PL/SQL 변수)란?
호스트 환경에서 생성 되어 데이터를 저장하기 때문에 호스트 변수라고도 합니다.
예약어 VARIABLE 을 쓰며 , SQL 이나 PL/SQL 에서도 사용 가능 합니다.
PL/SQL 실행 후에도 접근 가능 합니다.
print 명령어를 통해 출력 가능 합니다.
:를 붙여 이용합니다.
SET AUTOPRINT ON;
BEGIN
SELECT (salary*12+nvl(commission_pct*salary,0))
INTO :vsal
FROM employees
WHERE employee_id = 128;
END;
/
PRINT vsal;