본문 바로가기

📚Study Note/ORACLE

[ ORACLE ] DEFAULT 표현식

■■■   DEFAULT 표현식   ■■■


1. INSERT 와 UPDATE문에서 사용자가 전달하는 특정 값이 아닌
기본값을 입력하도록 처리할 수 있다. 

2. 형식 및 구조
컬럼명 데이터타입 DEFAULT 기본값

3. INSERT 명령 시 해당 컬럼에 입력될 값을 할당하지 않거나
DEFAULT 키워드를 활용하여 기본 값을 입력하도록 할 수 있다.

4. DEFAUT 키워드와 다른 제약(NOT NULL 등) 표기가 같이 오는 경우
    DEFAULT 키워드를 먼저 표기(작성)할 것을 권장한다.
*/
-- ● DEFAULT 표현식 실습
-- 테이블 생성

CREATE TABLE TBL_BOARD
(SID        NUMBER      PRIMARY KEY     -- 게시판 테이블 생성
,NAME       VARCHAR2(30)                -- 게시물 번호 식별자 (자동 증가)
,CONTENTS   VARCHAR2(2000)              -- 게시물 작성자
,WRITEDAY   DATE        DEFAULT SYSDATE -- 게시물 내용
,COMMENTS   NUMBER      DEFAULT 0       -- 게시물 작성일(현재 날짜 자동 입력)
,COUNTS     NUMBER      DEFAULT 0       -- 게시물 댓글 개수(기본값 0)
);                                      -- 게시물 조회 수(기본값 0 )
--==>>Table TBL_BOARD이(가) 생성되었습니다.


--SID를 자동으로 증가 값으로 운영하려면 시퀀스 객체가 필요하다. 
--자동으로 입력되는 컬럼은 사용자가 입력해야하는 항목에서 제외시킬 수 있다.

-- 시퀀스 생성
CREATE SEQUENCE SEQ_BOARD
NOCACHE;

--==>> Sequence SEQ_BOARD이(가) 생성되었습니다.

-- 세션설정 변경
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';


-- 게시물 작성
INSERT INTO TBL_BOARD(SID, NAME, CONTENTS, WRITEDAY, COMMENTS, COUNTS) 
VALUES (SEQ_BOARD.NEXTVAL, '이상화', '오라클에서 DEFAULT 표현식을 실습중입니다.'
, TO_DATE('2021-04-06 11:01:13','YYYY-MM-DD HH24:MI:SS'),0,0);

--===>>1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD(SID, NAME, CONTENTS, WRITEDAY, COMMENTS, COUNTS) 
VALUES (SEQ_BOARD.NEXTVAL, '소서현', '계속 실습 중입니다.', SYSDATE,0,0);
--===>>1 행 이(가) 삽입되었습니다.



INSERT INTO TBL_BOARD(SID, NAME, CONTENTS, WRITEDAY, COMMENTS, COUNTS) 
VALUES (SEQ_BOARD.NEXTVAL, '이희주', '힘껏 실습 중입니다.', DEFAULT,DEFAULT,DEFAULT);
--===>>1 행 이(가) 삽입되었습니다.


INSERT INTO TBL_BOARD(SID, NAME, CONTENTS) 
VALUES (SEQ_BOARD.NEXTVAL, '이희주', '힘껏 실습 중입니다.');
--===>> 1 행 이(가) 삽입되었습니다.

SELECT *
FROM TBL_BOARD;
/*
이상화	오라클에서 DEFAULT 표현식을 실습중입니다.	2021-04-06 11:01:13	0	0
소서현	계속 실습 중입니다.	                        2021-04-07 09:30:16	0	0
이희주	힘껏 실습 중입니다.	                        2021-04-07 09:30:54	0	0
이희주	힘껏 실습 중입니다.	                        2021-04-07 09:32:28	0	0
*/

COMMIT;
--===>>커밋 완료.


-- ● DEFAULT 표현식 확인(조회)
SELECT *
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME='TBL_BOARD';

/*                                  DATA_DEFAULT
TBL_BOARD	SID	        NUMBER		(NULL)	
TBL_BOARD	NAME	    VARCHAR2	(NULL)		
TBL_BOARD	CONTENTS	VARCHAR2	(NULL)			
TBL_BOARD	WRITEDAY	DATE		SYSDATE	
TBL_BOARD	COMMENTS	NUMBER		0			
TBL_BOARD	COUNTS	    NUMBER		0		

*/


-- 테이블 생성 이후 DEFAULT 표현식 추가 / 변경

ALTER TABLE 테이블명
MODIFY 컬럼명[자료형] DEFAULT 기본값;

-- 테이블 생성 이후 DEAULT 표현식 제거(삭제)
ALTER TABLE 테이블명
MODIFY 컬럼명[자료형] DEFAULT NULL;

최근에는 조회수를 내부적으로 같은 IP 로그기록 안에서 유효한 카운팅 뽑아내도록 설계를 해둔다
같은 PC에서 정해진 시간안에 또 클릭했을 때 안올라가도록 만든다. 계속 클릭해도 일정수 올라간
다음에 올라가지 않는다. 계속 11로 머물러 있습니다. 그러니까 예전이랑은 다른 방식으로 처리가
되기는 합니다.