DATABASE/SQL, PL-SQL

오라클 scott 예제 스키마

devstep88 2021. 1. 16. 21:25

오라클을 설치 시 scott 예제 스키마가 설치되어 있고 그 계정에는  emp, dept, bonus, salgrade라는 네 개의 테이블이 들어있다. 만약 scott 계정이 설치되지 않았다면 다음의 스크립트를 실행하여 계정 scott를 생성하라.

스크립트는 사용자 생성 권한이 있는 DBA 계정으로 접속해서 실행해야 한다.

 

-scott 계정 생성

% sqlplus / as sysdba
REM scott 계정 생성
CREATE USER scott IDENTIFIED BY tiger;
ALTER USER scott DEFAULT TABLESPACE USERS;
ALTER USER scott QUOTA UNLIMITED ON USERS;
GRANT RESOURCE, CONNECT TO scott;

 

다음은 예제 테이블과 예제 테이터를 생성하는 스크립트이다.

REM scott 계정으로 접속
CONN scott/tiger

CREATE TABLE emp
(empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2));

INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, DATE'1980-12-17', 800, NULL, 20);
INSERT INTO emp VALUES(7499, 'ALLEN', 'SALESMAN', 7698, DATE'1981-02-20', 1600, 300, 30);
INSERT INTO emp VALUES(7521, 'WARD', 'SALESMAN', 7698, DATE'1981-02-22', 1250, 500, 30);
INSERT INTO emp VALUES(7566, 'JONES', 'MANAGER', 7839, DATE'1981-04-02', 2975, NULL, 20);
INSERT INTO emp VALUES(7654, 'MARTIN', 'SALESMAN', 7698, DATE'1981-09-28', 1250, 1400, 30);
INSERT INTO emp VALUES(7698, 'BLAKE', 'MANAGER', 7839, DATE'1981-05-01', 2850, NULL, 30);
INSERT INTO emp VALUES(7782, 'CLARK', 'MANAGER', 7839, DATE'1981-06-09', 2450, NULL, 10);
INSERT INTO emp VALUES(7788, 'SCOTT', 'ANALYST', 7566, DATE'1987-04-19', 3000, NULL, 20);
INSERT INTO emp VALUES(7839, 'KING', 'PRESIDENT', NULL, DATE'1981-11-17', 5000, NULL, 10);
INSERT INTO emp VALUES(7844, 'TURNER', 'SALESMAN', 7698, DATE'1981-09-08', 1500, 0, 30);
INSERT INTO emp VALUES(7876, 'ADAMS', 'CLERK', 7788, DATE'1987-05-23', 1100, NULL, 20);
INSERT INTO emp VALUES(7900, 'JAMES', 'CLERK', 7698, DATE'1981-12-03', 950, NULL, 30);
INSERT INTO emp VALUES(7902, 'FORD', 'ANALYST', 7566, DATE'1981-12-03', 3000, NULL, 20);
INSERT INTO emp VALUES(7934, 'MILLER', 'CLERK', 7782, DATE'1982-01-23', 1300, NULL, 10);

SELECT * FROM EMP;

CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13) );

INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON');

SELECT * FROM dept;


CREATE TABLE bonus
(ename VARCHAR2(10),
job VARCHAR2(9),
sal NUMBER,
comm NUMBER);

CREATE TABLE salgrade
(grade NUMBER,
losal NUMBER,
hisal NUMBER );

INSERT INTO salgrade VALUES(1, 700, 1200);
INSERT INTO salgrade VALUES(2, 1201, 1400);
INSERT INTO salgrade VALUES(3, 1401, 2000);
INSERT INTO salgrade VALUES(4, 2001, 3000);
INSERT INTO salgrade VALUES(5, 3001, 9999);

commit;

 

오라클 예제인 스키마 scott의 테이블 4개에는 있어야 할 인덱스와 제약조건이 존재하지 않으므로 생성해주자.

CREATE UNIQUE INDEX dept_pk ON dept(deptno);
ALTER TABLE dept ADD CONSTRAINT dept_pk PRIMARY KEY(deptno);

CREATE UNIQUE INDEX emp_pk ON emp(empno);
ALTER TABLE emp ADD CONSTRAINT emp_pk PRIMARY KEY(empno);
CREATE UNIQUE INDEX emp_ename_uk ON emp(ename);
ALTER TABLE emp ADD CONSTRAINT emp_ename_uk UNIQUE(ename);


CREATE UNIQUE INDEX bonus_pk ON bonus(ename);
ALTER TABLE bonus ADD CONSTRAINT bonus_pk PRIMARY KEY(ename);

CREATE UNIQUE INDEX salgrade_pk ON salgrade(grade);
ALTER TABLE salgrade ADD CONSTRAINT salgrade_pk PRIMARY KEY(grade);