본문 바로가기

Programming/DataBase

(SQL) 복합변수가 무엇일까?

728x90
반응형


 복합변수란?

  ▷ 여러가지 다른 유형의 데이터들을 저장하는 변수

  ▷ Record TYPE 과 Table TYPE으로 나뉨



▣ Record TYPE 변수란??

  ▷ 데이터 타입이 다른 여러 데이터를 저장할 경우 사

  ▷ 지정방법

     1. type 타입명 is record()

     2. 식별자 type 타입명;


사용 예시)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
declare
type emp_rec is record
(empNo EMPTEST.EMPNO%type,
 empSal EMP.SAL%type,
 empname emp.ename%type,
 empJob EMPtest.DEPTNO%type);
 
 rec1 emp_rec; --emp_rec에 대한 식별자가 rec1
 
 begin
  select EMPNO, SAL, ename, DEPTNO
  into rec1
  from emp
  where empno = 7839;
  
  dbms_output.put_line('사번         돈          업무처 ');
  DBMS_OUTPUT.PUT_LINE(rec1.empNo||'      '||rec1.empSal||'           ' ||rec1.empJOB ||'       ' ||rec1.empname);
 
 end;
 /
cs

1. declare(선언부에서) Record type변수 선언

   type emp_rec is record  --레코드 타입 선언

   (empNo EMP.EMPNO%TYPE,

    empSal EMP.SAL%TYPE,

    empname EMP.ename%TYPE,

    empJob EMP.detpno%TYPE);  -- 데이터 타입이 다른 여러 변수들을 지정


  rec1 emp_rec; --emp_rec에 대한 식별자를 지정 rec1


2. begin

   select EMPNO, SAL, ename, DEPNO

   into rec1 -- EMPNO, SAL, ename, DEPTNO를 rec1에 넣겠다.

   from emp --emp테이블로부터 뽑아오겠다.

   where empno = 7839; --empno가 7839인 데이터를 뽑아오겠다.


3. end;

4. /



▣ Table TYPE 변수(컬렉션)란??

  ▷ 하나의 테이블에 하나의 컬럼의 데이터 타입을 저장한다.

 

  ▷ 컬렉션(배열) : 일반 프로그래밍 언어에서 사용하는 배열 타입을PL/SQL에서는 컬렉션이라고 한다.


  ▷ 종류

     1) 연관배열(associative array/ index-by table) : 키와 값의 쌍으로 구성된 콜랙션, java 의 hash table과 동일한 개념

       - key 데이터유형 -> 숫자 : binary_integer, pls_integer

                                  위 두가지 데이터타입은 number보다 작은 저장 영역이 필요, 산술연산의 경우 number보다 빠르다.

                                 문자 : varchar


       - 값(value) -> 일반 데이터 타입, 레코드 타입이 값이 될 수 있다.

                          레코드 타입일 경우 여러개의 값을 가질 수 있다.

                                       

     2) varray(variable array) : 고정 길이를 가진 배열 일반 프로그래밍에서 사용하는 배열과 같다.


     3) 중첩테이블(nested table) : varray와 흡사한 구조의 배열

         배열의 크기를 명시하지 않음, 동적으로 배열의 크기가 설정됨.

  ▷ Table 타입의 선언 형식

    1. 정의

        TYPE 타입명 IS TABLE OF

        EMP.ENAME%TYPE

        INDEX BY BINARY_INTEGER;

    2.  선언 (메모리화 한다.)

        식별자, 타입명;


사용 예시)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 DECLARE
   tname varchar2(20);
   
   type t_emp_name is table of
   emp.ename%type
   index by binary_integer;
   
   v_name t_emp_name;
   
begin
   select job into tname
   from emp
   where empno = 7369;
   
   v_name(0) := tname;
   dbms_output.put_line(v_name(0));
   end;
   /
cs

1. DECARE(선언부)에서 tname 을 선언

   type t_emp_name is table of 

   emp.ename%type

   index by binary_integer; -- emp.ename타입의 테이블 변수를 선언 key 데이터 유형 설정

   

   v_name t_emp_name; --식별자를 만들어준다

2. BEGIN

   select job into tname

   from emp

   where empno = 7369;  -- emp 테이블의 empno가 7369인 데이터의 job을 선택해

                                      tname에 넣어주겠다.

   v_name(0) := tname; -- v_name의 0번째에 tname을 넣어주겠다.

   dbms_output.put_line(v_name(0)); -- v_name의 0번째를 출력하겠다.

3. END;

4. /



반응형