본문 바로가기

개발 & 코딩/Oracle

오라클 테이블 관련 (Oracle Table)

1. TABLE 생성

CREATE TABLE 테이블명
    (
      칼럼명1 타입(크기) NULL여부,
      칼럼명2 타입(크기) NULL여부,
      ...
     )

 

2. TABLE 데이터 INSERT, UPDATE, DELETE

1) INSERT
 Ex) 직접 데이터를 INSERT하는 경우
 > INSERT INTO 테이블명(칼럼1, 칼럼2, 칼럼3, ...)
   VALUES(칼럼1의데이터, 칼럼2의데이터, 칼럼3의데이터);
 
 Ex) 다른테이블의 데이터를 불러와 INSERT하는 경우
 > INSERT INTO 테이블명(칼럼1, 칼럼2, 칼럼3, ...)
   (SELECT 복사하려는테이블의칼럼1, 복사하려는테이블의칼럼2, 복사하려는테이블의칼럼3, ... FROM 복사하려는테이블명 WHERE 조건절);


2) UPDATE
 > UPDATE 테이블명
    SET 칼럼1 = '데이터값',
         칼럼2 = '데이터값',
         칼럼3 = '데이터값'
    WHERE 조건절;


3) DELETE FROM 테이블명 WHERE 조건절;

 

3. TABLE명 변경

 > RENAME 변경전테이블명 TO 변경후테이블명;

 

4. 테이블에 칼럼 추가, 수정, 삭제, 칼럼명 변경하기

1) 추가하기
 > ALTER TABLE 테이블명 ADD (칼럼명 칼럼타입);
 
 Ex) TEST 테이블에 VARCHAR2(9)타입의 COL1 칼럼을 추가한다.
 > ALTER TABLE TEST ADD (COL1 VARCHAR2(9));


2) 수정하기
 > ALTER TABLE 테이블명 MODIFY (수정할칼럼명 변경할타입);
 
 Ex) TEST 테이블에있는 COL1타입의 속성을VARCHAR2(30)으로 변경
 > ALTER TABLE TEST MODIFY (COL1 VARCHAR2(30));
 

3) 삭제하기
 > ALTER TABLE 테이블명 DROP (칼럼명);
 
 Ex) TEST 테이블에있는 COL1칼럼을 삭제
 > ALTER TABLE TEST DROP (COL1);	


4) 칼럼명 변경
 > ALTER TABLE 테이블명 RENAME COLUMN 변경전칼럼명 TO 변경후칼럼명;

 

5. 칼럼 사용중지하기

칼럼삭제시 서버의 과부하를 막기위해 칼럼의 사용을 중지시킨후 삭제시켜 서버의 과부하를 조금이나마줄인다 
 > ALTER TABLE 테이블명 SET UNUSED(칼럼명);
 
 Ex) TEST 테이블에있는 COL1 칼럼의 사용을 막는다
 > ALTER TABLE TEST SET UNUSED(COL1);

 Ex) TEST 테이블에 UNUSED 설정이 되어있는 칼럼을 모두삭제한다
 > ALTER TABLE TEST DROP UNUSED COLUMNS;

 

6. 제약조건 추가하기

1) 제약조건을 추가할때에는 기존칼럼row가 추가할 제약조건 값을 만족하는지 검사해야함
2) 기본 제약조건만 할경우는 modify 제약위반메세지 추가시는 add를 사용
 
 Ex) not null 을 추가할때는 기존칼럼 row에 null이있으면 not null제약추가가안됨
 > ALTER TABLE emp2 modify employee_id Primary Key;
 
 Ex) TEST 테이블에있는 employee_id칼럼에 Primary Key 제약조건을 추가한다.
 > ALTER TABLE TEST ADD CONSTRAINT emp_mgr_fk FOREIGN KEY(manager_id) REFERENCES emp2(employee_id);
 
 Ex) emp2테이블에 manager_id칼럼이 employee_id를 부모칼럼으로 참조하며 위배시 emp_mgr_fk 에러가나오게한다.
 > COMMENT ON COLUMN TTS_CTRCT_CHG_MST.CTRCT_CHG_APV_YN IS '계약변경승인여부';

 

7. 테이블 삭제

 1) 테이블 기본삭제
 > DROP TABLE 테이블명 CASCADE CONSTRAINT;
 
 2) 휴지통 비우기
 > PURGE RECYCLEBIN;

 3) 테이블 완전삭제(휴지통에 저장하지 않음)
 > DROP TABLE 테이블명 CASCADE CONSTRAINT PURGE;

 ※ 2), 3)을 실행하면 테이블은 더이상 복구 할 수 없다.

 

8. 테이블 존재여부 확인

SELECT TABLE_NAME, DROPPED FROM USER_TABLES WHERE TABLE_NAME = '테이블명';

 

9. 테이블 데이터 변경이력 확인

1) 변경이력 확인
 > SELECT VERSIONS_STARTSCN STSCN, VERSIONS_ENDSCN ENDSCN, VERSIONS_OPERATION OPT, 이력확인할 칼럼1, 이력확인할 칼럼2, ... 
    FROM 테이블명 VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE 조건절;

2) 변경이력의 VERSIONS_STARTSCN 혹은 VERSIONS_ENDSCN 값으로 데이터가 입력 되었을때의 시간 알아보기
 > SELECT SCN_TO_TIMESTAMP(VERSIONS_STARTSCN혹은VERSIONS_ENDSCN값) FROM DUAL;

 Ex) SELECT SCN_TO_TIMESTAMP(69507260) FROM DUAL;