[ 커서(Cursor) ]


- 실행한 SQL문의 단위


1) 커서의 단계

- 커서선언하기
- 커서오픈하기
- 커서에서 추출한 결과 저장하기
- 커서닫기



 

예)

DECLARE
    VEMPNO NUMBER(4);
    VENAME VARCHAR2(20);
    VSAL NUMBER(7,2);
    
    CURSOR C1
    IS
    SELECT EMPNO,ENAME,SAL
    FROM EMP
    WHERE DEPTNO=30;
BEGIN
    OPEN C1; --커서오픈하기
    LOOP
        FETCH C1 
        INTO VEMPNO,VENAME,VSAL;
        EXIT WHEN C1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(VEMPNO||' '||VENAME||' '||VSAL);
    END LOOP;
    CLOSE C1; --커서닫기
END;
/


DECLARE
    CURSOR EMP_CURSOR
    IS
    SELECT ENAME,SAL
    FROM EMP
    ORDER BY SAL DESC;
    STAR VARCHAR2(100);
    CNT NUMBER:=0;
BEGIN
    DBMS_OUTPUT.PUT_LINE(' =======  사원별 급여 현황  =======');
    FOR CURVAL IN EMP_CURSOR LOOP
        STAR:=NULL;
        CNT:=TRUNC(CURVAL.SAL/100);
        FOR I IN 1..CNT LOOP
            STAR:=STAR||'*';
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(CURVAL.ENAME);
        DBMS_OUTPUT.PUT_LINE(STAR||' '||CURVAL.SAL);
    END LOOP;
END;
/




[ 사용자 계정관리 ]


1) 계정생성

CREATE USER 아이디 IDENTIFIED BY 비밀번호;

 

예)

CREATE USER TEST IDENTIFIED BY TEST1234;



-- 사용자 생성권한이 있는 시스템계정으로 로그인

SQL> conn / as sysdba
Connected.
 
SQL> create user test identified by test1234;
User created.


-- test계정에 접속과 리소스사용권한부여하기

SQL> grant connect,resource to test;
Grant succeeded.
SQL> conn test/test1234


2) 비밀번호 변경하기

ALTER USER 아이디 IDENTIFIED BY 수정할 비밀번호;


SQL> conn / as sysdba
Connected.
 

SQL> alter user test identified by test0000;

User altered



 

3) 계정삭제하기

DROP USER 아이디;

 

예)

drop user test;
 
-- 데이터가 하나라도 존재하면 계정삭제가 안됨.이때 CASCADE옵션 사용
SQL> drop user test CASCADE;



[ 계층형 쿼리 ]


- 계층적구조로 값을 출력


형식)

SELECT 컬럼명,..
  FROM 테이블명
START WITH 시작조건     -- 루트설정
CONNECT BY PRIOR 참조조건; -- 참조관계설정

 

( 자식쪽에 prior )

 

예1)

SELECT *
FROM EMP
START WITH ENAME='KING'     -- 시작조건(루트설정)
CONNECT BY PRIOR EMPNO=MGR; -- 참조관계설정 조건
 
 
예2)
SELECT LPAD(' ',(LEVEL-1)*2)||EMPNO,ENAME,MGR
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO=MGR;




[ 트리거(Trigger) ]

 

- 데이터베이스가 미리 정해은은 조건을 만족하거나 어떤 동작이 수행되면 자동적으로 수행되는 동작(특정 동작에 대한 이벤트로 인해서 실행되는 프로시져)

 

- 형식)

CREATE OR REPLACE TIGGER 트리거이름
TIMING [BEFORE|AFTER] EVENT[INSERT|UPDATE|DELETE] ON 테이블명
[FOR EACH ROW]
DECLARE
    변수선언;
    ..
BEGIN
    실행문장;
    ..
END;
/


예)  DEPT테이블에 부서가 추가(INSERT)될때 부서가 추가되었음을 출력하는 트리거

SQL> SET SERVEROUTPUT ON

-- 트리거만들기
CREATE OR REPLACE TRIGGER PRINT_MSG
AFTER INSERT ON DEPT    -- DEPT테이블에 INSERT가 수행된 후 자동호출
BEGIN
    DBMS_OUTPUT.PUT_LINE('부서가 추가되었어요');
END;
/

 

-- DEPT테이블에 데이터 추가해보기

SQL> INSERT INTO DEPT VALUES(91,'개발부','종로');

부서가 추가되었어요   ==> 트리거가 자동 호출됨

 

-- 트리거 제거하기

SQL> DROP TRIGGER PRINT_MSG;

 


예)  예제테이블

#상품테이블
CREATE TABLE ITEM
(
CODE CHAR(6) PRIMARY KEY, -- 상품코드
NAME VARCHAR2(12) NOT NULL, --상품이름
COMPANY VARCHAR2(12) , --제조회사
PRICE NUMBER(8), --가격
CNT NUMBER DEFAULT 0 --재고수량
);

#입고테이블
CREATE TABLE WAREHOUSE
(
NUM NUMBER(6) PRIMARY KEY, --입고번호
CODE CHAR(6) REFERENCES ITEM(CODE), --상품코드
PUTDATE DATE DEFAULT SYSDATE,--입고날짜
PUTCNT NUMBER(6), --입고수량
PUTPRICE NUMBER(6),--입고단가
TOTALPRICE NUMBER(8) --입고총액
);
 

SQL> INSERT INTO ITEM(CODE,NAME,COMPANY,PRICE)
     2  VALUES('A01','냉장고','삼성',700000);
SQL> INSERT INTO ITEM(CODE,NAME,COMPANY,PRICE)
      2  VALUES('A02','세탁기','LG',500000);

 

SQL> SELECT * FROM ITEM;

 

CODE   NAME   ...  PRICE  CNT
----- -------      ------ ---
A01   냉장고  ...  700000  0
A02   세탁기  ...  500000  0


 


1) INSERT 트리거

 

입고테이블에 상품이 입고(INSERT)되면 자동으로 ITEM테이블의 해당상품의 재고수량이 증가(UPDATE)되는 트리거 작성

 

CREATE OR REPLACE TRIGGER TRG_ADDITEM
AFTER INSERT ON WAREHOUSE
FOR EACH ROW
BEGIN
    UPDATE ITEM SET CNT=CNT+:NEW.PUTCNT
    WHERE CODE=:NEW.CODE;
END;
/

 

 

SQL> INSERT INTO WAREHOUSE
     2  VALUES(1,'A01',SYSDATE,10,1000,10000);

1 row created.


SQL> SELECT * FROM WAREHOUSE;


NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 10     1000     10000

==> 입고테이블에 A01제품이 추가되었으므로 트리거가 실행되어 상품테이블의 CNT수량이 입고수량만큼 증가됨

 

SQL> SELECT * FROM ITEM;


CODE NAME   COMPANY PRICE  CNT
---- ------ ------- ------ ---
A01  냉장고 삼성    700000  10
A02  세탁기 LG      500000   0

 

 

2) 삭제트리거

(입고테이블에 입고되었던 상황이 삭제되면 상품테이블에 재고수량에서 삭제된 입고수량만큼 삭제하는 트리거)

 

CREATE OR REPLACE TRIGGER TRG_DELETE
AFTER DELETE ON WAREHOUSE
FOR EACH ROW
BEGIN
 UPDATE ITEM
 SET CNT=CNT-:OLD.PUTCNT
 WHERE CODE=:OLD.CODE;
END;
/

 

SQL> SELECT * FROM WAREHOUSE;

 

NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 10     1000     10000
2   A01  12/11/23 5      1000     10000


SQL> DELETE FROM WAREHOUSE WHERE CODE='A01';

 

2 rows deleted.

--> 삭제트리거가 실행되면서 ITEM테이블의 해당 상품의 재고수량이 감소됨

 

 

SQL> SELECT * FROM ITEM;

 

CODE NAME    COMPANY  PRICE CNT
---- ------- ------- ------ ---
A01  냉장고  삼성    700000 0
A02  세탁기  LG      500000 0

 

 

3) 갱신트리거

- 이미 입고된 상품에 대해서 입고 수량이 변경되면 상품 테이블의 재고 수량이 변경되는 트리거

 

CREATE OR REPLACE TRIGGER TRG_UPDATE
AFTER UPDATE ON WAREHOUSE
FOR EACH ROW
BEGIN
    UPDATE ITEM SET CNT=CNT+(-:OLD.PUTCNT+:NEW.PUTCNT)
    WHERE CODE=:NEW.CODE;
END;
/


SQL> SELECT * FROM WAREHOUSE;

NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 10     1000     10000
2   A01  12/11/23 5      1000     10000


SQL> SELECT * FROM ITEM;

CODE NAME    COMPANY PRICE   CNT
---- ------- ------- ------- ----
A01  냉장고  삼성    700000  15
A02  세탁기  LG      500000   0

 

-- 입고테이블의 수량변경(UPDATE하기)
UPDATE WAREHOUSE
SET PUTCNT=3
WHERE NUM=1;


- 입고테이블의 수량이 변경됨
SQL> SELECT * FROM WAREHOUSE;


NUM CODE PUTDATE  PUTCNT PUTPRICE TOTALPRICE
--- ---- -------- ------ -------- ----------
1   A01  12/11/23 3      1000     10000
2   A01  12/11/23 5      1000     10000


-- 상품테이블의 재고수량(CNT)도 자동 수량이 변경됨

SQL> SELECT * FROM ITEM;


CODE NAME    COMPANY PRICE   CNT
---- ------- ------- ------- ----
A01  냉장고  삼성    700000  8
A02  세탁기  LG      500000  0

 



 

Q1) DEPT테이블의 부서가 삭제될때 해당부서에 근무하는 사원들도 자동 삭제되는 트리거를 만들어 보세요..(COMMIT하지말고 ROLLBACK하세요)


CREATE OR REPLACE TRIGGER EMPDEL
AFTER DELETE ON DEPT
FOR EACH ROW
BEGIN
     DELETE FROM EMP
     WHERE DEPTNO=:OLD.DEPTNO;
END;
/

 

-- DEPT테이블에서 부서 제거
SQL> DELETE FROM DEPT WHERE DEPTNO=10;

 

-- 해당부서에 근무하는 사원들도 같이 삭제됨
SQL> SELECT * FROM EMP;




[ 시퀀스 ]


- 연속적인 숫자값을 자동으로 증감시키는 일련번호를 발생시키는 객체

 

- 형식

CREATE SEQUENCE 시퀀스명
[INCREMENT BY N]
[START WITH N]
[MAXVALUE N | NOMAXVALUE N]
[MINVALUE N | NOMINVALUE N]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]

 

예)

CREATE SEQUENCE TEST_SEQ; -- 시퀀스 생성하기

 

SQL> SELECT TEST_SEQ.NEXTVAL FROM DUAL;-- 일련번호 얻어오기


NEXTVAL
----------
1

 

SQL> SELECT TEST_SEQ.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
2

 

SQL> SELECT TEST_SEQ.CURRVAL FROM DUAL; -- 현재발생된 일련번호 얻어오기

 

SQL> DROP SEQUENCE TEST_SEQ; -- 시퀀스 삭제하기

 

예)

SQL> CREATE SEQUENCE TEST_SEQ1
    2  INCREMENT BY 10
    3  START WITH 100
    4  MAXVALUE 100
    5  CYCLE
    6  NOCACHE;
Sequence created.

 

SQL> SELECT TEST_SEQ1.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
100

 

SQL> SELECT TEST_SEQ1.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
1

 

SQL> SELECT TEST_SEQ1.NEXTVAL FROM DUAL;

 

NEXTVAL
----------
11

 

-- 시퀀스 조회하기

SQL> SELECT * FROM SEQ;

 


예)

SQL> CREATE SEQUENCE TEST_SEQ1
    2  INCREMENT BY 10
    3  START WITH 100
    4  MAXVALUE 100
    5  CYCLE
    6  NOCACHE;


SQL> CREATE SEQUENCE BOARD_SEQ;

Sequence created.

 

SQL> INSERT INTO BOARD
    2  VALUES(BOARD_SEQ.NEXTVAL,'TEST','SONG');

1 row created.

 

SQL> INSERT INTO BOARD
    2  VALUES(BOARD_SEQ.NEXTVAL,'TODAY','KIM');

 

SQL> SELECT * FROM BOARD;

 

NUM TITLE  WRITER
--- ------ -------
1   TEST   SONG
2   TODAY  KIM

 

 



[ 뷰(VIEW) ]


1) 뷰는 테이블에 대한 가상 테이블로써 SELECT로 조회된 데이터들의 가상 테이블이다.

 

2) 사용이유

(1) 보안설정
(2) 복잡하고 자주 사용되는 질의를 뷰를 통해서 쉽게 사용

 

3) 형식

CREATE OR REPLACE VIEW 뷰이름
AS
서브쿼리;
..
[WITH CHECK OPTION]
[WITH READ ONLY]

 

 

## 뷰 생성 권한 부여하기

SQL> CONN / AS SYSDBA

SQL> GRANT CREATE VIEW TO SCOTT;

SQL> CONN scott/tiger

 

 

-- 뷰생성하기

SQL> CREATE VIEW MYVIEW
      2  AS
      3     SELECT EMPNO "사원번호",ENAME "사원이름",SAL "급여",JOB "직업"
      4     FROM EMP

 

SQL> SELECT * FROM MYVIEW;

 

사원번호 사원이름 급여 직업
-------- -------- ---- ------
7369     SMITH    800  CLERK
7521     WARD     1250 SALESMAN
7566     JONES    2975 MANAGER
7654     MARTIN   1250 SALESMAN
..

 

SQL> SELECT 사원이름,급여 FROM MYVIEW;

 

사원이름 급여
-------- -----
SMITH    800
WARD     1250
JONES    2975
MARTIN   1250
BLAKE    2850
......


SQL> INSERT INTO MYVIEW
      2  VALUES(9000,'김길동',3000,'청소부');

1 row created.


SQL> SELECT * FROM EMP; -- 실제테이블에 추가됨


-- 뷰제거하기
SQL> DROP VIEW MYVIEW;

 

 


예)

SQL> CREATE OR REPLACE VIEW MYVIEW
      2  AS
      3     SELECT EMPNO,ENAME,SAL,JOB,DEPTNO
      4     FROM EMP
      5     WHERE SAL>=2000
      6     WITH CHECK OPTION;

 

 

SQL> INSERT INTO MYVIEW
      2  VALUES(9002,'송규남',1000,'강사',30);

INSERT INTO MYVIEW
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
--> WITH CHECK OPTION 이 설정되어 있어서 오류!
(뷰의 질의에 대한 조건이 맞지 않으므로 오류!)

 

 


4) 뷰의 종류

(1) 단일뷰 : 하나의 테이블로 생성되는 뷰(기본적으로 DML작업가능. WITH READ ONLY 옵션을 주면 DML작업은 할수없다.)

(2) 복합뷰 : 두개 이상의 테이블로 생성되는 뷰(조인).DML 작업을 할 수 없다.

 



 

Q1) EMP테이블과 DEPT테이블을 이용하여 이름,직업,급여,부서명,위치를 조회하는 뷰를 생성하고 사용해 보세요.

SQL> CREATE OR REPLACE VIEW EMPVIEW
  2  AS
  3     SELECT E.ENAME,E.JOB,E.SAL,D.DNAME,D.LOC
  4     FROM EMP E,DEPT D
  5     WHERE E.DEPTNO=D.DEPTNO;

View created.

SQL> SELECT * FROM EMPVIEW;              


-- 뷰 정보 조회하기
SQL> SELECT VIEW_NAME FROM USER_VIEWS;

VIEW_NAME
----------
EMPVIEW
MYVIEW

 

 



[ 제약조건 ]


- 테이블의 해당 컬럼에 원치않는 데이터를 입력/변경/삭제되는 것을 방지하기위해 설정하는 조건

 

1) 종류

(1) PRIMARY KEY(식별키)
  - 하나의 테이블에 오직 하나만 존재되며 하나의 ROW를 대표하는 컬럼


(2) FOREIGN KEY(참조키/외래키)
  - 부모테이블의 PK를 참조하는 컬럼


(3) UNIQUE KEY(유일키)
  - 컬럼의 모든 값이 유일해야 하는 경우.즉 중복데이터를 허용하지 않는컬럼.

  - PK와의 차이점
  a. PK는 NULL을 허용하지 않지만 유일키는 NULL허용함.
  b. PK는 하나의 테이블에 하나만 존재하지만 유일키는 여러개존재가능.


(4) CHECK
- 조건에 맞는 데이터만 입력되도록 조건을 부여한 제약조건

 

(5) NOT NULL
- NULL이 입력되어서는 안되는 컬럼에 부여하는 제약조건
- COLUMN LEVEL로만 제약조건 부여 가능.


 

 

2) 제약조건 예

 

(1) 제약조건에 이름을 부여하지 않은 경우

 

SQL> CREATE TABLE MYDEPT
2  (
3     DEPTNO NUMBER(2) PRIMARY KEY,  -- PK로 설정
4     DNAME VARCHAR2(15) DEFAULT '영업부', -- 값이 안들어오면 자동으로 '영업부'로 채워짐
5     LOC CHAR(9) CHECK(LOC IN('서울','부산','대구'))-- LOC컬럼은 서울,부산,대구만 저장될수있음
6  );

 

SQL> CREATE TABLE MYEMP
2  (
3     EMPNO NUMBER(4) PRIMARY KEY, -- PK로 설정
4     ENAME VARCHAR2(15) NOT NULL, -- NULL허용안함
5     JUMIN CHAR(13) UNIQUE, -- 중복값 허용안함
6     DEPTNO NUMBER(2) REFERENCES MYDEPT(DEPTNO) -- 외래키설정
7  );

 

 

-- 제약조건 보기

 

SQL> SELECT * FROM USER_CONSTRAINTS;--제약조건 전체 정보보기

 

SQL> SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS;--제약조건이름보기

 

CONSTRAINT_NAME
----------------------
PK_DEPT
PK_EMP
FK_DEPTNO
SYS_C007010
SYS_C007013
SYS_C007014

...

 

 

SQL> DESC MYDEPT;


Name Null? Type
------------ -------- ------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(15)
LOC CHAR(9)

 

 

SQL> INSERT INTO MYDEPT(DEPTNO,LOC)
2 VALUES(70,'제주');

INSERT INTO MYDEPT(DEPTNO,LOC)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.SYS_C007015) violated
==> CHECK제약조건이 맞지 않음

 

SQL> INSERT INTO MYDEPT(DEPTNO,LOC)
2 VALUES(70,'서울');

 

1 row created.

 

 

SQL> SELECT * FROM MYDEPT;

 

DEPTNO DNAME LOC
------ ------- ---------
70 영업부 서울

 

 

SQL> INSERT INTO MYEMP
2 VALUES(1,'홍길동','1111111111111',71);

INSERT INTO MYEMP
*

ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C007020) violated - parent key not
found
==> 부모테이블에 71부서가 존재하지 않으므로 에러!!!

 

 

SQL> INSERT INTO MYEMP
2 VALUES(1,'홍길동','1111111111111',70);

 

-- 테이블 삭제 : 자식테이블먼저 삭제하고 부모테이블 삭제하기

SQL> DROP TABLE MYEMP;

 

SQL> DROP TABLE MYDEPT;

 

 

 

  

(2) 제약조건에 이름을 부여한 경우


- 컬럼레벨 제약조건

CREATE TABLE MYDEPT
(
DEPTNO NUMBER(2) CONSTRAINT PK_MYDEPT_DEPTNO PRIMARY KEY,
DNAME VARCHAR2(15) DEFAULT '영업부',
LOC VARCHAR2(15) CONSTRAINT CK_MYDEPT_LOC CHECK(LOC IN('서울','부산'))
);

 


- 테이블 레벨 제약조건 : 하나의 컬럼에 두개 이상의 제약조건을 주고자 할때 또는 두개의 컬럼이 합쳐서 하나의 PK를 만들고자 할때



예)

CREATE TABLE MYEMP
(
 EMPNO NUMBER(4),
 ENAME VARCHAR2(15),
 ...
 CONSTRAINT PK_MYEMP_EMPNO PRIMARY KEY(EMPNO,ENAME),
 CONSTRAINT UQ_MYEMP_JUMIN UNIQUE(JUMIN),
 ...
);

...

 

SQL> CREATE TABLE MYEMP
2  (
3     EMPNO NUMBER(4),
4     ENAME VARCHAR2(15) CONSTRAINT NN_MYEMP_ENAME NOT NULL,--NOT NULL조건은 컬럼레벨만 가능!
5     JUMIN CHAR(13),
6     DEPTNO NUMBER(2),
7     CONSTRAINT PK_MYEMP_EMPNO PRIMARY KEY(EMPNO),
8     CONSTRAINT UQ_MYEMP_JUMIN UNIQUE(JUMIN),
9     CONSTRAINT FK_MYEMP_DEPTNO FOREIGN KEY(DEPTNO)
                            REFERENCES MYDEPT(DEPTNO)
10  );

 

 

## ON DELETE CASCADE 옵션

 

- 부모테이블의 데이터가 삭제되면 참조하는 자식테이블의 데이터도 자동으로 같이 삭제됨

 


예)

CREATE TABLE MYEMP
(
EMPNO NUMBER(4),
   ..
DEPTNO NUMBER(2),
   ..
CONSTRAINT FK_MYEMP_DEPTNO FOREIGN KEY(DEPTNO)
          REFERENCES MYDEPT(DEPTNO) ON DELETE CASCADE
);

 

 


-- 제약조건 삭제하기
SQL> ALTER TABLE MYDEPT DROP CONSTRAINT PK_MYDEPT_DEPTNO;



-- 제약조건 추가하기
SQL> ALTER TABLE MYDEPT ADD CONSTRAINT PK_MYDEPT PRIMARY KEY(DEPTNO);



 

 


[ 테이블생성 ]


1)형식


CREATE TABLE 테이블명
(
컬럼명 데이터형,
..
);

 

 

2) 기본자료형

 

 - NUMBER : 숫자=>정수,실수 저장
  예) NUM NUMBER(3), --> 정수 3자리 저장
       NUM NUMBER(5,2) --> 실수 전체자릿수 5,소수이하2자리 123.45

 

 - CHAR : 고정길이 문자열(2000바이트) 예) JUMIN CHAR(13)

 

 - VARCHAR2 : 가변길이 문자열(4000바이트) 예) NAME VARCHAR2(10)

 

 - DATE : 날짜,시간저장

 

 - TIMESTAMP : 날짜,시간저장(초이하 단위까지)

 

 - LONG : 가변길이문자열(2G BYTES)

 

 - RAW : 가변길이 바이너리 데이터(2000 BYTES)

 

 - LONGRAW : 가변길이 바이너리 데이터(2G BYTES)

 

 - BLOB : 바이너리 데이터(4G BYTES)

 

 - CLOB : 문자데이터 (4G BYTES)

 

  
3) 서브쿼리를 이용한 테이블 생성

 

- 테이블의 구조와 데이터가 복사되어서 생성됨==>제약조건은 복사안됨

SQL> CREATE TABLE EMP01
      2  AS SELECT *  FROM EMP;


- 테이블의 구조만 복사 : 항상 거짓인 조건을 주면 구조만 복사됨

SQL> CREATE TABLE EMP02
     2  AS
     3  SELECT * FROM EMP WHERE 1=0;

 Table created.

 

SQL> SELECT * FROM EMP02;

 no rows selected


- 서브쿼리를 이용한 데이터 추가
SQL> INSERT INTO EMP02 SELECT * FROM EMP;

12 rows created.

 



4) 테이블 구조 변경하기


- 컬럼 추가하기

SQL> ALTER TABLE EMP02 ADD(EMAIL VARCHAR2(10));
SQL> DESC EMP02 -- EMAIL컬럼이 추가됨


- 컬럼 변경하기

SQL> ALTER TABLE EMP02 MODIFY(EMAIL VARCHAR2(20));
SQL> DESC EMP02 -- 변경확인


- 컬럼명 변경하기

SQL> ALTER TABLE EMP02 RENAME COLUMN EMAIL TO MAIL;
SQL> DESC EMP02 -- 변경확인


- 컬럼 삭제하기

SQL> ALTER TABLE EMP02 DROP COLUMN MAIL;
SQL> DESC EMP02;

 

 

 

5) 테이블 삭제


- DROP TABLE 테이블명;

SQL> DROP TABLE EMP02;
SQL> SELECT * FROM TAB;-- 모든 테이블 정보 보기



+ Recent posts