この教材で作るユーザー、シーケンス、テーブル、サンプルデータの SQL をまとめて載せています。テーブルを作り直したいときや、別のパソコンで同じ環境を用意したいときに使ってください。第4章で保存した setup.sql と同じ内容です。
A.1 使い方
SQL は、実行する接続(ワークシートのタブの名前)ごとに分けてあります。それぞれのコードの右上の「コピー」ボタンでコピーし、該当する接続のワークシートに貼り付けて、F5(スクリプトの実行)で実行します。
| 節 | 実行する接続 | いつ実行するか |
|---|---|---|
| A.2 | XE_SYSTEM | 最初の1回だけ(第2章)。すでに dbapp ユーザーがあるときは実行しない |
| A.3 | XE_DBAPP | テーブルを作るとき(第3章)と、作り直すとき |
| A.4 | XE_DBAPP | A.3 の直後(第4章) |
| A.5 | XE_DBAPP | 作り直すとき、A.3 の前に実行する |
【再確認】実行する前に、ワークシートのタブの名前を確認する
A.2 は XE_SYSTEM、A.3〜A.5 は XE_DBAPP のワークシートで実行します。XE_SYSTEM で A.3 を実行すると、テーブルが system のスキーマにできてしまいます(第2章)。
A.2 学習用ユーザーの作成(XE_SYSTEM)
-- 学習用のユーザー dbapp を作成する
CREATE USER dbapp IDENTIFIED BY dbapp;
-- dbapp にすべての権限を与える(学習用)
GRANT ALL PRIVILEGES TO dbapp;
実行したら、第2章 2.4 の手順で XE_DBAPP の接続を作ります。
A.3 シーケンスとテーブルの作成(XE_DBAPP)
-- 部署IDの番号を振るシーケンス
CREATE SEQUENCE SEQ_DEPT NOCACHE;
-- 社員IDの番号を振るシーケンス
CREATE SEQUENCE SEQ_EMP NOCACHE;
-- 部署テーブル
CREATE TABLE DEPARTMENT (
DEPT_ID NUMBER(4) CONSTRAINT PK_DEPARTMENT PRIMARY KEY,
DEPT_NAME VARCHAR2(20 CHAR) NOT NULL
);
-- 社員テーブル
CREATE TABLE EMPLOYEE (
EMP_ID NUMBER(6) CONSTRAINT PK_EMPLOYEE PRIMARY KEY,
NAME VARCHAR2(20 CHAR) NOT NULL,
GENDER NUMBER(1) NOT NULL
CONSTRAINT CK_EMPLOYEE_GENDER CHECK (GENDER IN (1, 2)),
AGE NUMBER(3) NOT NULL,
BIRTH_DATE DATE NOT NULL,
DEPT_ID NUMBER(4) NOT NULL
CONSTRAINT FK_EMPLOYEE_DEPARTMENT REFERENCES DEPARTMENT (DEPT_ID),
ADDRESS VARCHAR2(10 CHAR) NOT NULL
);
A.4 サンプルデータの登録(XE_DBAPP)
-- 部署(DEPT_ID は SEQ_DEPT から 1, 2, 3, 4 と振られる)
INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME) VALUES (SEQ_DEPT.NEXTVAL, '総務部');
INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME) VALUES (SEQ_DEPT.NEXTVAL, '営業部');
INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME) VALUES (SEQ_DEPT.NEXTVAL, '開発部');
INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME) VALUES (SEQ_DEPT.NEXTVAL, '人事部');
-- 社員(EMP_ID は SEQ_EMP から 1〜10 と振られる)
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '雷禅 海皇', 1, 26, DATE '2000-06-22', 2, '大阪府');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '院照 心愛', 2, 27, DATE '1999-07-11', 1, '京都府');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '林檎 星飛', 1, 24, DATE '2001-12-24', 3, '東京都');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '田中 美咲', 2, 24, DATE '2002-03-05', 3, '愛知県');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '佐藤 健太', 1, 31, DATE '1995-04-12', 2, '東京都');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '鈴木 花子', 2, 29, DATE '1997-01-30', 1, '大阪府');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '高橋 翔', 1, 35, DATE '1991-08-15', 3, '東京都');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '伊藤 さくら', 2, 22, DATE '2004-05-20', 2, '兵庫県');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '渡辺 大輔', 1, 42, DATE '1984-02-10', 2, '神奈川県');
INSERT INTO EMPLOYEE (EMP_ID, NAME, GENDER, AGE, BIRTH_DATE, DEPT_ID, ADDRESS)
VALUES (SEQ_EMP.NEXTVAL, '中村 結衣', 2, 26, DATE '2000-09-03', 3, '京都府');
-- 登録を確定する
COMMIT;
登録できたかは、次の SQL で確かめられます。
SELECT e.EMP_ID, e.NAME, e.GENDER, e.AGE, e.BIRTH_DATE,
d.DEPT_NAME, e.ADDRESS
FROM EMPLOYEE e
INNER JOIN DEPARTMENT d ON e.DEPT_ID = d.DEPT_ID
ORDER BY e.EMP_ID;
A.5 作り直すとき(XE_DBAPP)
テーブルとシーケンスをすべて消します。消した後に、A.3 と A.4 を実行し直します。シーケンスを作り直すので、ID は 1 から振り直されます。
-- 社員テーブルを先に削除する(部署テーブルを参照しているため)
DROP TABLE EMPLOYEE;
DROP TABLE DEPARTMENT;
-- シーケンスも削除する(番号を 1 から振り直すため)
DROP SEQUENCE SEQ_EMP;
DROP SEQUENCE SEQ_DEPT;
【ご注意】DROP TABLE は取り消せない
テーブルの中のデータも一緒に消え、ROLLBACK では戻せません(第3章)。自分で登録したデータを残したいときは、消す前に SELECT の結果を控えておいてください。