IT/Oracle

oracle - 계정생성, 테이블 생성 및 컬럼 추가, jdbc연결, rownum, 게시판 답글 정렬 원리

노마드오브 2018. 11. 15. 19:48

* 오라클 SYSTEM 계정에서 새로운 계정 생성

CREATE USER jspid IDENTIFIED BY jsppass;


* 생성된 오라클 계정을 활성화

ALTER USER jspid ACCOUNT UNLOCK;


* 생성된 오라클 계정에게 DBA라는 역할(롤)을 부여

GRANT DBA TO jspid;



CREATE TABLE member (

    id       varchar2(12) primary key,

passwd   varchar2(12) not null,

name     varchar2(12) not null,

reg_date date         not null

);


ALTER TABLE member

ADD age NUMBER;


ALTER TABLE member

ADD gender VARCHAR2(5);


ALTER TABLE member

ADD email VARCHAR2(30);



JDBC(Java DataBase Connectivity)


ojdbc6.jar 드라이버 설치

이클립스 - WebContent - WEB-INF - lib 복사



1단계  설치한 JDBC드라이버 로딩

2단계  연결. DB url주소, 유저명, 패스워드 => 연결객체

3단계  sql생성 => sql문장(Statement)객체 생성

4단계  sql실행(insert,update,delete)  select=>저장객체

5단계  저장데이터 -> 웹출력 select



CREATE TABLE BOARD 

(

  NUM NUMBER NOT NULL 

, NAME VARCHAR2(20) 

, PASSWD VARCHAR2(20) 

, SUBJECT VARCHAR2(50) 

, CONTENT VARCHAR2(2000) 

, IP VARCHAR2(20) 

, REG_DATE DATE 

, READCOUNT NUMBER 

, RE_REF NUMBER 

, RE_LEV NUMBER 

, RE_SEQ NUMBER 

, FILENAME VARCHAR2(50) 

, CONSTRAINT BOARD_PK PRIMARY KEY 

  (

    NUM 

  )

  ENABLE 

);


COMMENT ON COLUMN BOARD.NUM IS '글번호';


COMMENT ON COLUMN BOARD.NAME IS '글쓴이 이름';


COMMENT ON COLUMN BOARD.PASSWD IS '글 패스워드';


COMMENT ON COLUMN BOARD.SUBJECT IS '글제목';


COMMENT ON COLUMN BOARD.CONTENT IS '글내용';


COMMENT ON COLUMN BOARD.IP IS 'IP주소';


COMMENT ON COLUMN BOARD.REG_DATE IS '작성날짜';


COMMENT ON COLUMN BOARD.READCOUNT IS '조회수';


COMMENT ON COLUMN BOARD.RE_REF IS '글그룹';


COMMENT ON COLUMN BOARD.RE_LEV IS '글그룹 내 들여쓰기 레벨';


COMMENT ON COLUMN BOARD.RE_SEQ IS '글그룹 내 순서';


COMMENT ON COLUMN BOARD.FILENAME IS '파일이름';




* 오라클의 rownum 특징

 - 실제 테이블의 rownum 컬럼값은 insert된 레코드 순서임.

 - 인라인뷰에서 rownum은 매번 1부터 새로 부여되야함!


select a.*

from

    (select rownum as rnum, a.*

    from (select * from emp order by sal desc) a 

    where rownum <= 8) a

where rnum >= 5;




select a.*

from

    (select rownum as rnum, a.*

    from (select * from board order by re_ref desc, re_seq asc) a 

    where rownum <= 8) a

where rnum >= 5;





num   subject       re_ref  re_lev  re_seq

============================================

 4    주글2            4       0       0

 5      답글1          4       1       1

 

 1    주글1            1       0       0

 6      답글2          1       1       1

 2      답글1          1       1       1+1=2

 3        답글1_1      1       2       2+1=3