본문 바로가기

개인공부 정리/문제풀이

0207 오라클 DB 문제풀이 - 데이터 정의어, 객체 종류, 제약 조건

1. 데이터 정의어 (ALTER,MODIFY) 324P

Q1)

--Q1.
CREATE TABLE EMP_HW(
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
);
DESC EMP_HW;
SELECT * FROM EMP_HW;

데이터 값만 입력된 DESC 결과 창
생성 되지 않은 모습

Q2)

--Q2
ALTER TABLE EMP_HW
ADD BIGO VARCHAR2(20);
SELECT * FROM EMP_HW;

BIGO가 추가 된 모습
DESC에서 확인할 수 있는 BIGO의 데이터 타입

Q3)

--Q3
ALTER TABLE EMP_HW
MODIFY BIGO VARCHAR2(30);
DESC EMP_HW;

BIGO의 DATA TYPE이 변경된 모습

Q4)

--Q4
ALTER TABLE EMP_HW
RENAME COLUMN BIGO TO REMARK;
SELECT * FROM EMP_HW;

REMARK로 변경된 모습

Q5)

--Q5
-- 실수 : INSERT ALL INTO EMP_HW VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20,NULL)
-- 서브 쿼리 : SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, NULL FROM EMP;
INSERT INTO EMP_HW
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, NULL FROM EMP;
SELECT * FROM EMP_HW;

추가된 모습

Q6)

--Q6
DROP TABLE EMP_HW;
SELECT * FROM EMP_HW;

테이블이 사라진 모습

2. 객체 종류 357P

Q1)

--Q1 357P
--1)
CREATE TABLE EMPIDX AS SELECT * FROM EMP;
SELECT * FROM EMPIDX;
--2)
CREATE INDEX IDX_EMPIDX_EMPNO
ON EMPIDX(EMPNO);
SELECT * FROM USER_IND_COLUMNS;
--3)
SELECT * FROM USER_INDEXES;

EMP를 참조하는 EMPIDX 테이블 생성
EMDIDX 인덱스 생성
데이터 사전 뷰 이용

Q2)

--Q2 OR REPLEACE 를 하기
--서브쿼리 : 
SELECT EMPNO,ENAME,JOB,DEPTNO,SAL,NVL2(COMM,'O','X') AS COMM FROM EMPIDX WHERE SAL > 1500;
--뷰 생성 권한 부여
GRANT CREATE VIEW TO SCOTT;
--뷰 생성
CREATE VIEW EMPIDX_OVER15K 
AS (SELECT EMPNO,ENAME,JOB,DEPTNO,SAL,NVL2(COMM,'O','X') AS COMM FROM EMPIDX WHERE SAL > 1500);
SELECT * FROM EMPIDX_OVER15K;
--뷰 수정 
CREATE OR REPLACE VIEW  EMPIDX_OVER15K AS (SELECT EMPNO,ENAME,JOB,DEPTNO,SAL,NVL2(COMM,'O','X')

결과 값

* CREATE 할 때 OR REPLACE 넣어주기!

 

Q3)

--Q3
--1) 테이블 생성 DEPT 참조
CREATE TABLE DEPTSEQ AS (SELECT * FROM DEPT);
SELECT * FROM DEPTSEQ;
--2) 시퀀스 생성
CREATE SEQUENCE SEQ_DEPTSEQ_SEQUENCE
START WITH 1
INCREMENT BY 1
MAXVALUE 99
MINVALUE 1
NOCYCLE 
NOCACHE ;
SELECT * FROM USER_SEQUENCES;

--3) 왜 안될까?
--쓰면 안되는 형식
INSERT ALL
INTO DEPTSEQ VALUES (SEQ_DEPTSEQ_SEQUENCE.NEXTVAL, 'DATABASE', 'SEOUL')
INTO DEPTSEQ VALUES (SEQ_DEPTSEQ_SEQUENCE.NEXTVAL+1, 'WEB', 'BUSAN')
INTO DEPTSEQ VALUES (SEQ_DEPTSEQ_SEQUENCE.NEXTVAL+2, 'MOBILE', 'ILSAN')
SELECT * FROM DUAL;

--INTO 형태로 수정해서 쓰기
INSERT INTO DEPTSEQ VALUES (SEQ_DEPTSEQ_SEQUENCE.NEXTVAL, 'DATABASE', 'SEOUL');
INSERT INTO DEPTSEQ VALUES (SEQ_DEPTSEQ_SEQUENCE.NEXTVAL, 'WEB', 'BUSAN');
INSERT INTO DEPTSEQ VALUES (SEQ_DEPTSEQ_SEQUENCE.NEXTVAL, 'MOBILE', 'ILSAN');
SELECT * FROM DEPTSEQ;

--테이블, 시퀀스 버리기
DROP TABLE DEPTSEQ;
DROP SEQUENCE SEQ_DEPTSEQ_SEQUENCE;

DEPTSEQ 테이블 결과 값
SEQ_DEPTSEQ_SEQUENCE가 저장된 모습
DEPTSEQ의 최종 결과값

 

728x90
반응형
LIST