Oracle Common
Oracle에서 자주 사용하는 데이터 타입과 기본 SQL을 정리한다.
🧱 Oracle 데이터 타입
Oracle은 기본적으로 문자열, 숫자, 날짜, LOB 형태로 데이터를 다룬다.
문자열 데이터 타입
| type | 설명 | 최대 길이 | 기본값 |
|---|---|---|---|
| CHAR(n) | 고정 길이 문자열 | 2000byte | 1byte |
| VARCHAR2(n) | 가변 길이 문자열 | 4000byte | 1byte |
| NCHAR(n) | 고정 길이 유니코드 문자열 | 2000byte | 1byte |
| NVARCHAR2(n) | 가변 길이 유니코드 문자열 | 2000byte | 1byte |
| LONG | 대용량 문자열 | 2Gbyte |
숫자 데이터 타입
| type | 설명 | 최대 길이 | 범위 |
|---|---|---|---|
| NUMBER(P, S) | 가변 숫자 | 22byte | P(1~38), S(-84~127) |
| FLOAT(P) | NUMBER 하위 타입 | 22byte | P(1~128) |
| BINARY_FLOAT | 32bit 부동소수점 | 4byte | |
| BINARY_DOUBLE | 64bit 부동소수점 | 8byte |
## | type | 설명 | | ——— | ——————————————— | | DATE | 연월일시분초까지 저장 가능 | | TIMESTAMP | 날짜+시간 + 소수 초까지 저장 가능 |
LOB 데이터 타입
| type | 설명 |
|---|---|
| CLOB | 문자 대용량 객체 |
| NCLOB | 유니코드 문자 대용량 객체 |
| BLOB | 이진 대용량 객체 |
| BFILE | 외부 파일에 대한 읽기 전용 참조 |
🧪 CRUD 예시
테이블 생성
CREATE TABLE USERS (
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(100),
EMAIL VARCHAR2(100),
CREATED_AT DATE DEFAULT SYSDATE
);
데이터 삽입
INSERT INTO USERS (ID, NAME, EMAIL) VALUES (1, '홍길동', 'hong@example.com');
COMMIT;
데이터 조회
SELECT * FROM USERS WHERE NAME = '홍길동';
데이터 수정
UPDATE USERS SET EMAIL = 'hong_new@example.com' WHERE ID = 1;
COMMIT;
데이터 삭제
DELETE FROM USERS WHERE ID = 1;
COMMIT;
🧩 Sequence 사용 예시
Sequence는 자동 증가하는 ID를 생성할 때 사용한다.
Sequence 생성
CREATE SEQUENCE USER_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
Sequence 값 사용
INSERT INTO USERS (ID, NAME, EMAIL) VALUES (USER_SEQ.NEXTVAL, '김철수', 'kim@example.com');
현재 값 확인
SELECT USER_SEQ.CURRVAL FROM DUAL;
🧭 ROWNUM을 활용한 페이징
상위 10건 조회
SELECT * FROM USERS WHERE ROWNUM <= 10;
11~20건 조회
SELECT * FROM (
SELECT A.*, ROWNUM AS RNUM FROM (
SELECT * FROM USERS ORDER BY CREATED_AT DESC
) A WHERE ROWNUM <= 20
) WHERE RNUM > 10;
🕒 날짜와 시간 예시
현재 날짜 조회
SELECT SYSDATE FROM DUAL;
특정 날짜 이후 조회
SELECT * FROM USERS WHERE CREATED_AT >= TO_DATE('2024-01-01', 'YYYY-MM-DD');
##
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
🛠️ 기타 자주 쓰는 SQL
컬럼 추가
ALTER TABLE USERS ADD PHONE_NUMBER VARCHAR2(20);
컬럼 삭제
ALTER TABLE USERS DROP COLUMN PHONE_NUMBER;
인덱스 생성
CREATE INDEX IDX_USERS_EMAIL ON USERS (EMAIL);
테이블 삭제
DROP TABLE USERS CASCADE CONSTRAINTS;
댓글남기기