ORACLE SERVER A -- TBL_MEMBER 생성 데이터 삽입하면
ORACLE SERVER B -- TBL_MEMBER 자동으로 A의 데이터를 삽입
ORACLE SERVER A <<
1) NETSERVICE 생성 - ORAHOME
--F36 ~
SELECT * FROM GLOBAL_NAME;
-- ~ F45
2) DATABASE LINK 생성
SYS에서 암호 변경
ALTER USER DB402USER1 IDENTIFIED BY DBSXOR;
링크 권한 부여
GRANT CREATE DATABASE LINK TO DB402USER1;
컴백
구분을 위해 이름 테이블 생성
CREATE TABLE TBL_YT
(NO NUMBER,
NAME VARCHAR2(10)
);
INSERT INTO TBL_YT VALUES (1,'윤택');
COMMIT;
SELECT * FROM TBL_YT;
--46
CREATE DATABASE LINK LINK_KYH
CONNECT TO DB402USER1 IDENTIFIED BY KIMYOUNGHUN-- 상대 서버의 계정임!!
USING 'KYHORADB';
SELECT * FROM TBL_YT
UNION
(SELECT * FROM TBL_KYH@LINK_KYH);
-- 47
CREATE TABLE TBL_HEOWON
(NO NUMBER,
ID VARCHAR2(10),
PASSWD VARCHAR2(10),
NAME VARCHAR2(20)
);
SYS에서
GRANT CREATE TRIGGER TO DB402USER1;
PL/SQL 로 작업
-- MS-SQL SEVER의 경우
--INSERT 되어진 행은 트리거 내에서 가상 테이블인 INSERTED라는 테이블에 INSERT 되어진다.
--DELETE 되어진 행은 트리거 내에서 가상 테이블인 DELETED라는 테이블에 INSERT 되어진다.
-- ORACLE의 경우 -개념은 같다.
-- ORACLE SERVER의 경우
-- INSERT 되어진 행은 :NEW 에 INSERT 되어 진다.
-- DELETE 되어진 행은 :OLD 에 INSERT 되어 진다.
-- 행 트리거 -
-- 두 경우 모두 UPDATE의 경우 DELETE 수행 후 INSERT 되는 것이다.!!
CREATE OR REPLACE TRIGGER ATRI_TBL_HEOWON_INS
AFTER INSERT ON TBL_HEOWON
FOR EACH ROW -- 각 행마다! 호출하여야 행 트리거 작용!
BEGIN
INSERT INTO TBL_HEOWON@LINK_KYH VALUES (:NEW.NO, :NEW.ID, :NEW.PWD,:NEW.NAME);
END;
SQL에서
INSERT INTO TBL_HEOWON VALUES (1, 'SUPERMAN1','DBA007$','김영훈');
COMMIT;
(SELECT *
FROM TBL_HEOWON)
UNION ALL
(SELECT *
FROM TBL_HEOWON@LINK_KYH);
UPDATE TBL_HEOWON
SET NAME ='김영'
WHERE NO =1;
SELECT *
FROM TBL_HEOWON
UNION ALL
(SELECT *
FROM TBL_HEOWON@LINK_KYH);
--F49
-- PL/SQL
CREATE OR REPLACE TRIGGER ATRI_TBL_HEOWON_UPD
AFTER UPDATE ON TBL_HEOWON
FOR EACH ROW
BEGIN
UPDATE TBL_HEOWON@LINK_KYH
SET NO=:NEW.NO, ID=:NEW.ID, PASSWD=:NEW.PASSWD, NAME=:NEW.NAME
WHERE ID = :OLD.ID;
END;
-- PL/SQL에서 쿼리의 단위는 무조건 마무리(;) 해야함
CREATE OR REPLACE TRIGGER ATRI_TBL_HEOWON_DEL
AFTER UPDATE ON TBL_HEOWON
FOR EACH ROW
BEGIN
DELETE TBL_HEOWON@LINK_KYH
WHERE ID = :OLD.ID ;
END;
--
댓글 없음:
댓글 쓰기