Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-18
제목 ORACLE8 : OBJECT VIEW 개념과 사용법
개요
====
일반적인 relational data에 대해서 object-oriented application이 access
할 수 있도록 view를 생성하여 interface할 수 있는데 이를 object view라고
지칭한다.

object view를 이용하므로 해서 다음과 같은 이점을 얻을 수 있다.
. object-oriented application이 relational data를 access할 수 있다.
. 기존의 relational data에 근간한 application들도 그대로 이용할 수 있다.
. INSTEAD OF trigger를 이용하면 object view를 통해서도 data를 update할
수 있다.

사용예
======
--
-- base table(relational table) 생성
--
CREATE TABLE ord
(ord_id NUMBER(9) PRIMARY KEY,
cust_id NUMBER(6)) ;

CREATE TABLE line_item
(ord_id NUMBER(9) REFERENCES ord,
prod_id NUMBER(6),
price NUMBER(9,2),
quantity NUMBER(5)) ;

--
-- object type생성
--
CREATE OR REPLACE TYPE line_item_type AS OBJECT
(prod_id NUMBER(6),
price NUMBER(9,2),
quantity NUMBER(5)) ;
/

CREATE OR REPLACE TYPE line_item_array_type
AS VARRAY(100) OF line_item_type ;
/

--
-- object view생성
--
CREATE OR REPLACE VIEW ord_item AS
SELECT o.ord_id, o.cust_id,
CAST(MULTISET(SELECT prod_id, price, quantity
FROM line_item i
WHERE i.ord_id = o.ord_id)
AS line_item_array_type)
AS line_items
FROM ord o ;

--
-- trigger 생성
--
CREATE OR REPLACE TRIGGER ord_item_insert
INSTEAD OF INSERT ON ord_item
FOR EACH ROW
BEGIN
INSERT INTO ord VALUES (:NEW.ord_id, :NEW.cust_id) ;
FOR i IN 1..:NEW.line_items.COUNT LOOP
INSERT INTO line_item
VALUES (:NEW.ord_id,
:NEW.line_items(i).prod_id,
:NEW.line_items(i).price,
:NEW.line_items(i).quantity) ;
END LOOP ;
END ;
/

--
-- object view를 통한 insert작업
--
INSERT INTO ord_item
VALUES (900,950,
line_item_array_type(
line_item_type (100,14,700),
line_item_type (200,17.5,800))) ;

--
-- base table에 data입력 확인
--
SELECT * FROM ord ;
ORD_ID CUST_ID
---------- ----------
900 950

SELECT * FROM line_item ;
ORD_ID PROD_ID PRICE QUANTITY
---------- ---------- ---------- ----------
900 100 14 700
900 200 17.5 800

--
-- object view를 통한 입력자료 확인
--
SELECT o.ord_id, o.cust_id, i.prod_id, i.price, i.quantity
FROM ord_item o, TABLE(o.line_items) i
WHERE i.prod_id in (100,200) ;

ORD_ID CUST_ID PROD_ID PRICE QUANTITY
---------- ---------- ---------- ---------- ----------
900 950 100 14 700
900 950 200 17.5 800
Comment
등록된 코멘트가 없습니다.