데이터베이스/Oracle

oracle 테이블 복사 및 구조 복사 , PL-SQL(반복문)

backend dev 2024. 4. 3.

PL-SQL (반복문)

Begin
    for i in 1..100 loop
            insert into temp2(id) values ('A' || to_char(i));
    end loop;
end;

A100까지 들어가있다.

 

 

테이블 구조 및 데이터 복사하기

CREATE TABLE 신규테이블명 AS SELECT * FROM 복사할테이블명 [WHERE]

 

/*
새로운 테이블을 생성하고 원하는 테이블 구조(복제): 스키마 + 데이터 삽입
단점 : 제약은 복제가 안된다 ( pk, fk)
순수한 데이터 구조 + 데이터가 복사된다.
 */

create table copyemp
as
    select * from emp;

select * from copyemp;

 

 

 

 

 

 

 

테이블이 존재할경우  데이터만 복사하기

테이블이 존재할경우, 데이터만 복사하기(구조가 같은경우)
INSERT INTO 복사대상테이블명 SELECT * FROM 원본테이블명 [WHERE]


테이블이 존재할경우, 데이터만 복사하기(구조가 다를경우 또는 구조가 같아도 명시하고 싶은경우)
INSERT INTO 복사대상테이블명 (COL1, COL2) SELECT COL1, COL2 FROM 원본테이블명 [WHERE]

 

Begin
    for i in 1..10 loop
            insert into temp4(id) values (i);
    end loop;
end;


select * from temp4;
select * from temp5;
-- temp 4에 있는 대량의 데이터를 temp5에 넣고싶다.
-- insert into 테이블명(컬럼리스트) values(값들)
-- insert into 테이블명(컬럼리스트) select ...

temp4에는

A100까지 들어가있다.

이 데이터가 들어가있다.

 

temp5라는 새로운 테이블에다가 temp4의 데이터를 모두 복사하고싶다면

insert into temp5(num)
select id from temp4;
--temp5의 num에 temp4의 id값들이 들어간다.

다음과 같이 진행

(원하는 데이터가 따로있다면 where을 통해서 조건을 건다)

(temp4의 id 데이터를 temp5의 num에 넣는다.)

 

 

위에서 temp4와 temp5는 테이블 구조가 같으므로 

insert into temp5
select * from temp4;

도 가능하다. 

 

 

 

테이블 구조만 복사하기

CREATE TABLE 신규테이블명 AS SELECT * FROM 복사할테이블명 WHERE 1=2


--테이블의 구조(를) 복제 ( 데이터가 필요없을때)
create table copyemp3
as
    select * from emp where 1=2; 
    -- 조건이 항상 거짓이라 데이터는 가져오지않고, 테이블의 구조만 가져온다.

select *
from copyemp3; -- copyemp3

데이터 없이 테이블 구조만 복사되어진 모습

 

 

 

'데이터베이스 > Oracle' 카테고리의 다른 글

Sequence 시퀀스  (0) 2024.04.04
view (뷰)  (0) 2024.04.04
가상컬럼  (0) 2024.04.03
서브쿼리 (subQuery) [스칼라,인라인 뷰,중첩] // all any some 연산자  (0) 2024.04.02
inner Join, Outer Join  (0) 2024.04.02

댓글