/*********************************************
3. TRUNCATE ( 데이터 삭제 )
**********************************************/
TRUNCATE TABLE DEPT7 ;
-- 테이블의 데이터 전부 삭제하고 사용하고 있던 공간을 반납하는 명령어
-- 테이블 자체는 남아 있음
/*********************************************
4. DROP ( 테이블 삭제 )
**********************************************/
DROP TABLE DEPT7 ;
-- 테이블 자체를 삭제하는 명령어
-- 내용, 인덱스 모두 지워짐
-- BIN$ 형태로 이름 변경
-- FLASHBACK TABLE 이라는 기능을 구현하기 - 이전으로 되돌리기 기능 존재
/*****************************************************
5. 11g에서 추가된 기능
******************************************************/
-- 5-1 읽기 전용 테이블로 변경하기 - 11g New Feature
CREATE TABLE T_READONLY(
NO NUMBER,
NAME VARCHAR2(10));
INSERT INTO T_READONLY
VALUES (1, 'AAA');
COMMIT;
SELECT * FROM T_READONLY;
-- 읽기 전용으로 변경하기
ALTER TABLE T_READONLY READ ONLY;
-- 읽기 전용 테이블에 다시 입력 시도
INSERT INTO T_READONLY
VALUES (2, 'BBB');
-- 읽기전용으로 변경된 테이블에 컬럼 추가 시도함
ALTER TABLE T_READONLY
ADD (TEL NUMBER DEFAULT 111);
-- 읽기 전용인 테이블을 다시 읽기/쓰기 모드로 변경함
ALTER TABLE T_READONLY READ WRITE;
-- 읽기 전용인 테이블은 읽기 전용 상태일 때 아래의 명령으로 삭제 가능함
DROP TABLE T_READONLY;
-- 현재 테이블이 읽기 전용인지 확인하기
SELECT TABLE_NAME, READ_ONLY
FROM USER_TABLES
WHERE TABLE_NAME = 'T_READONLY';
-- 5-2. 가상 컬럼 테이블 생성하기 (11g 부터 추가된 기능)
-- 가상 테이블 생성
CREATE TABLE VT1(
COL1 NUMBER,
COL2 NUMBER,
COL3 NUMBER GENERATED ALWAYS AS (COL1 + COL2));
-- 구조 확인
DESC VT1;
-- 데이터 입력
INSERT INTO VT1 VALUES(1,2,3);
INSERT INTO VT1 VALUES(1,2);
INSERT INTO VT1(COL1, COL2) VALUES (1, 2);
-- 내용 확인
SELECT * FROM VT1;
-- 내용 변경
UPDATE VT1
SET COL1=5;
-- 새로운 가상 컬럼을 추가
ALTER TABLE VT1
ADD (COL4 GENERATED ALWAYS AS ((COL1*12)+COL2));
-- 테이블에서 컬럼 내역 조회하기
SELECT *
FROM SYS.USER_TAB_COLUMNS
WHERE TABLE_NAME = 'VT1';
-- 조건절로 가상 컬럼 생성하기
-- 가상 컬럼 생성시 여러가지 조건을 주면서도 생성이 가능함
CREATE TABLE SALES10(
NO NUMBER,
PCODE CHAR(4),
PDATE CHAR(8),
PQTY NUMBER,
PBUNGI NUMBER(1)
GENERATED ALWAYS AS (
CASE
WHEN SUBSTR(PDATE, 5, 2) IN ('01', '02', '03') THEN 1
WHEN SUBSTR(PDATE, 5, 2) IN ('04', '05', '06') THEN 2
WHEN SUBSTR(PDATE, 5, 2) IN ('07', '08', '09') THEN 3
ELSE 4
END) VIRTUAL);
-- 데이터 입력
INSERT INTO SALES10 (NO, PCODE, PDATE, PQTY)
VALUES (1, '100', '20110112', 10);
INSERT INTO SALES10 (NO, PCODE, PDATE, PQTY)
VALUES (2, '200', '20110505', 20);
INSERT INTO SALES10 (NO, PCODE, PDATE, PQTY)
VALUES (3, '300', '20110812', 30);
INSERT INTO SALES10 (NO, PCODE, PDATE, PQTY)
VALUES (4, '400', '20111124', 40);
COMMIT;
-- 내용 확인
SELECT * FROM SALES10;