/* 절차적 코드 */
BEGIN
FOR x IN (SELECT * FROM table@remote_db)
LOOP
INSERT INTO table (c1, c2, ...) VALUES(x.c1, x.c2, ...);
END LOOP;
END;
/* 한방 SQL */
INSERT INTO table (c1, c2, ...)
SELECT c1, c2, ... FROM table@remote_db;
BEGIN
FOR i IN 1 .. 1000
LOOP
FOR x IN (SELECT t1.a t1a, t1.y t1y
, t2.b t2b, t2.a t2a, t2.y t2y
, t3.c t3c, t3.b t3b, t3.y t3y
FROM t1, t2, t3
WHERE t1.a = i
AND t2.a(+) = t1.a
AND t3.b(+) = t2.b )
LOOP
NULL;
END LOOP;
END LOOP;
END;
/
BEGIN
FOR i IN 1 .. 1000
LOOP
FOR a IN (SELECT t1.a, t1.y
FROM t1 WHERE t1.a = i)
LOOP
FOR b IN (SELECT t2.b, t2.a, t2.y
FROM t2 WHERE t2.a = a.a)
LOOP
FOR c IN (SELECT t3.c, t3.b, t3.y
FROM t3 WHERE t3.b = b.b)
LOOP
NULL;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END;
/
INSERT INTO t (c1, c2, ...)
SELECT c1, c2, ...
FROM t1, t2, t3, t4
WHERE ..Join Condition..;
LOOP
DELETE FROM t
WHERE (c1, c2) IN (SELECT c1, MIN(c2)
FROM t
GROUP BY c1
HAVING COUNT(1) > 1);
EXIT WHEN SQL%ROWCOUNT = 0;
END LOOP;
/
INSERT INTO t (c1, c2, ...)
SELECT
FROM (SELECT c1, c2, ...
, MAX(c2) OVER(PARTITION BY c1) max_c2
, COUNT(*) OVER(PARTITION BY c1, c2) cnt
FROM t1, t2, t3, t4
WHERE ..Join Condition..)
WHERE c2 = max_c2
AND cnt = 1
;
- 강좌 URL : http://www.gurubee.net/lecture/3573
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.