강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

ORDBMS기능 맛배기

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

ORDBMS기능 맛배기

 

ORDBMS라고 들어봤을 것이다.
좀 모순이 있는 용어라고 생각된다. 하지만.. 어디까지나 내 생각이다.

본인이 프로그래머라 일단은 C++의 클래스의 개념과 비슷한 type이란 놈을 설명하겠다.
type은 create type이라는 질의로 만들수 있다.
일단 예제를 보자.

create type paycheck_type as object
(
check_number			number(20),  	
payer					varchar2(40),						
payee					varchar2(40),						
date_issued				date,        						
payment_authorization	varchar2(10),
payer_account_number	varchar2(20),
routing_number			varchar2(20),
payment_amount			number(10),
member function adjust_amount( check_number number, deduct_amount number) return number
-- pragma restrict_references(adjust_amount, WNDS)
);

푸.. 이거 완전히 C++의 class구조이다.
무지하게 흥미가 당기게 만든다.
일반 테이블 선언하듯이 하면 되는데 일단은 as object라는 것이 붙어서 자신이 객체라는
것을 알린다. member function도 존재해서 object화를 하는데 구색은 다 갖췄다.
member function은 PL/SQL로 개발할 수 있다.

여기서 adjust_amount라는 놈을 정의해보자.
type body로써 정의한다.
create or replace type body paycheck_type is
	member function adjust_amount( check_number number, deduct_amount number) return number is
	begin
		return check_number - deduct_amount;
	end;
end;

실제 위의 예제를 SQL*PLUS상에서 보자.
SQL> create type paycheck_type as object
  2  (
  3  check_number   number(20),   
  4  payer     varchar2(40),      
  5  payee     varchar2(40),      
  6  date_issued    date,              
  7  payment_authorization varchar2(10),
  8  payer_account_number varchar2(20),
  9  routing_number   varchar2(20),
 10  payment_amount   number(10),
 11  member function adjust_amount( check_number number, deduct_amount number) return number
 12  -- pragma restrict_references(adjust_amount, WNDS)
 13  );
 14  /

유형이 작성되었습니다.

SQL> create or replace type body paycheck_type is
  2   member function adjust_amount( check_number number, deduct_amount number) return number is
  3   begin
  4    return check_number - deduct_amount;
  5   end;
  6  end;
  7  /

유형 본체가 작성되었습니다.

실제 위의 것은 어떻게 사용될 수 있는가?
테이블을 만들어 보자.
위에서 만든 type을 of라는 놈을 사용해서 테이블 만들때 참조한다.

SQL> create table paycheck of paycheck_type;

테이블이 생성되었습니다.
SQL> desc paycheck;
 이름                                                  널?      유형
 ----------------------------------------------------- -------- --------------
 CHECK_NUMBER                                                   NUMBER(20)
 PAYER                                                          VARCHAR2(40)
 PAYEE                                                          VARCHAR2(40)
 DATE_ISSUED                                                    DATE
 PAYMENT_AUTHORIZATION                                          VARCHAR2(10)
 PAYER_ACCOUNT_NUMBER                                           VARCHAR2(20)
 ROUTING_NUMBER                                                 VARCHAR2(20)
 PAYMENT_AMOUNT                                                 NUMBER(10)

SQL> 

재미있는 것은 type이 또 다른 type을 포함할 수 있다는 것이다.
즉, 다음과 같은 표현이 가능하다.

SQL> create type debit_payroll_type as object
  2  (
  3  acc_wd_num number(10),
  4  debit ref paycheck_type
  5  );
  6  /

유형이 작성되었습니다.

debit_payroll도 type이지만, paycheck_type이라는 또 다른 type을 포함하고 있다.
이건 C++에서의 상속과 유사한 개념이다.

그럼 실제 데이터를 넣어보자.
SQL> insert into paycheck values (
  2  paycheck_type(123456, '사장', '명규', sysdate, 'Neximo', 123, 123, 2400));

1 개의 행이 만들어졌습니다.

SQL> select * from paycheck;

CHECK_NUMBER PAYER      PAYEE      DATE_ISS PAYMENT_AU PAYER_ACCOUNT_NUMBER ROUTING_NUMBER       PAYMENT_AMOUNT
------------ ---------- ---------- -------- ---------- -------------------- -------------------- ---
      123456 사장       명규       01/04/03 Neximo     123                  123                            2400
      
흠.. 재미있군..
지금이 02시군.. 내일도 직장에 가야하니까.. 여기까지..

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  97 명