Modelo de Estudio Caso Oracle
Modelo de Estudio Caso Oracle
--------
======================================
SQL*Plus script: crecase.sql
Creates case tables (with constraints)
Mastering Oracle SQL and SQL*Plus
Lex de Haan
Apress, 2005
======================================
-- ===============
-- EMPLOYEES table
-- ===============
create table employees
( empno
NUMBER(4)
, ename
VARCHAR2(8)
, init
VARCHAR2(5)
, job
, mgr
VARCHAR2(8)
NUMBER(4)
, bdate
DATE
constraint E_PK
primary key
constraint E_EMPNO_CHK
check (empno > 7000)
constraint E_NAME_NN
not null
constraint E_INIT_NN
not null
constraint E_MGR_FK
references employees
constraint E_BDAT_NN
, msal
NUMBER(6,2)
, comm
NUMBER(6,2)
, deptno
NUMBER(2)
, constraint E_SALES_CHK
not null
constraint E_MSAL_NN
not null
default 10
check
(decode(job,'SALESREP',0,1)
+ nvl2(comm,
1,0) = 1)
) ;
-- =================
-- DEPARTMENTS table
-- =================
create table departments
( deptno NUMBER(2)
constraint D_PK
primary key
constraint D_DEPTNO_CHK
check (mod(deptno,10) = 0)
, dname VARCHAR2(10) constraint D_DNAME_NN
not null
constraint D_DNAME_UN
unique
constraint D_DNAME_CHK
check (dname = upper(dname))
, location VARCHAR2(8) constraint D_LOC_NN
not null
constraint D_LOC_CHK
check (location = upper(location))
, mgr
NUMBER(4)
constraint D_MGR_FK
references employees
) ;
alter table employees
add (constraint E_DEPT_FK
foreign key (deptno)
references departments);
-- ===============
-- SALGRADES table
-- ===============
create table salgrades
( grade
NUMBER(2)
constraint S_PK
primary key
, lowerlimit NUMBER(6,2) constraint S_LOWER_NN
not null
constraint S_LOWER_CHK
-- =============
-- COURSES table
-- =============
create table courses
( code
VARCHAR2(6)
constraint C_PK
primary key
, description VARCHAR2(30) constraint C_DESC_NN
not null
, category
CHAR(3)
constraint C_CAT_NN
not null
, duration
NUMBER(2)
constraint C_DUR_NN
not null
, constraint C_CODE_CHK
check
(code = upper(code))
, constraint C_CAT_CHK
check
(category in ('GEN','BLD','DSG'))
) ;
-- ===============
-- OFFERINGS table
-- ===============
create table offerings
( course
VARCHAR2(6)
, begindate
DATE
, trainer
NUMBER(4)
, location
VARCHAR2(8)
, constraint O_PK
) ;
constraint
not null
constraint
references
constraint
not null
constraint
references
O_COURSE_NN
O_COURSE_FK
courses
O_BEGIN_NN
O_TRAIN_FK
employees
primary key
(course,begindate)
-- ===================
-- REGISTRATIONS table
-- ===================
create table registrations
( attendee
NUMBER(4)
constraint R_ATT_NN
not null
constraint R_ATT_FK
references employees
, course
VARCHAR2(6) constraint R_COURSE_NN
not null
, begindate
DATE
constraint R_BEGIN_NN
not null
, evaluation NUMBER(1)
constraint R_EVAL_CHK
check (evaluation in (1,2,3,4,5))
, constraint R_PK
primary key
(attendee,course,begindate)
, constraint R_OFF_FK
foreign key
(course,begindate)
references offerings
) ;
-- =============
-- HISTORY table
-- =============
create table history
( empno
NUMBER(4)
, beginyear
NUMBER(4)
, begindate
DATE
, enddate
, deptno
DATE
NUMBER(2)
, msal
NUMBER(6,2)
constraint H_EMPNO_NN
not null
constraint H_EMPNO_FK
references employees
on delete cascade
constraint H_BYEAR_NN
not null
constraint H_BDATE_NN
not null
constraint
not null
constraint
references
constraint
not null
H_DEPT_NN
H_DEPT_FK
departments
H_MSAL_NN
, comments
VARCHAR2(60)
, constraint H_PK
primary key
(empno,begindate)
, constraint H_BEG_END
check
(begindate < enddate)
) ;
--------
==========================================
SQL*Plus script: popcase.sql
Populates (or repopulates) the case tables
Mastering Oracle SQL and SQL*Plus
Lex de Haan
Apress, 2005
==========================================
-- ====================================================
-- Disable PK/FK constraints (to make inserting easier)
-- ====================================================
alter table employees
disable primary key cascade;
alter table departments disable primary key cascade;
-- ========================================
-- EMPLOYEES (empno,ename,init,job,mgr
-,bdate,msal,comm,deptno)
-- ========================================
truncate table employees;
insert into employees values(7369,'SMITH','N',
date '1965-12-17',
insert into employees values(7499,'ALLEN','JAM',
date '1961-02-20',
insert into employees values(7521,'WARD','TF' ,
date '1962-02-22',
insert into employees values(7566,'JONES','JM',
date '1967-04-02',
insert into employees values(7654,'MARTIN','P',
date '1956-09-28',
insert into employees values(7698,'BLAKE','R',
date '1963-11-01',
insert into employees values(7782,'CLARK','AB',
date '1965-06-09',
insert into employees values(7788,'SCOTT','SCJ',
date '1959-11-26',
insert into employees values(7839,'KING','CC',
date '1952-11-17',
insert into employees values(7844,'TURNER','JJ',
date '1968-09-28',
insert into employees values(7876,'ADAMS','AA',
date '1966-12-30',
insert into employees values(7900,'JONES','R',
'TRAINER', 7902,
800 , NULL, 20);
'SALESREP',7698,
1600, 300,
30);
'SALESREP',7698,
1250, 500,
30);
'MANAGER', 7839,
2975, NULL, 20);
'SALESREP',7698,
1250, 1400, 30);
'MANAGER', 7839,
2850, NULL, 30);
'MANAGER', 7839,
2450, NULL, 10);
'TRAINER', 7566,
3000, NULL, 20);
'DIRECTOR',NULL,
5000, NULL, 10);
'SALESREP',7698,
1500, 0,
30);
'TRAINER', 7788,
1100, NULL, 20);
'ADMIN',
7698,
into
into
into
into
departments
departments
departments
departments
values
values
values
values
(10,'ACCOUNTING','NEW YORK',7782);
(20,'TRAINING', 'DALLAS', 7566);
(30,'SALES',
'CHICAGO', 7698);
(40,'HR',
'BOSTON', 7839);
-- =============================================
-- SALGRADES (grade,lowerlimit,upperlimit,bonus)
-- =============================================
truncate table salgrades;
insert
insert
insert
insert
insert
into
into
into
into
into
salgrades
salgrades
salgrades
salgrades
salgrades
values
values
values
values
values
(1,
(2,
(3,
(4,
(5,
700,1200,
0);
1201,1400, 50);
1401,2000, 100);
2001,3000, 200);
3001,9999, 500);
-- ========================================
-- COURSES (code,description,type,duration)
-- ========================================
alter table courses disable primary key cascade;
truncate table courses;
insert into courses values
('SQL','Introduction to SQL',
'GEN',4);
insert into courses values
('OAU','Oracle for application users','GEN',1);
insert into courses values
('JAV','Java for Oracle developers', 'BLD',4);
insert into courses values
('PLS','Introduction to PL/SQL',
insert into courses values
('XML','XML for Oracle developers',
insert into courses values
('ERM','Data modeling with ERM',
insert into courses values
('PMT','Process modeling techniques',
insert into courses values
('RSD','Relational system design',
insert into courses values
('PRO','Prototyping',
insert into courses values
('GEN','System generation',
'BLD',1);
'BLD',2);
'DSG',3);
'DSG',1);
'DSG',2);
'DSG',5);
'DSG',4);
into
into
into
into
into
into
into
into
into
into
into
into
into
offerings
offerings
offerings
offerings
offerings
offerings
offerings
offerings
offerings
offerings
offerings
offerings
offerings
values
values
values
values
values
values
values
values
values
values
values
values
values
('SQL',date
('OAU',date
('SQL',date
('SQL',date
('JAV',date
('XML',date
('JAV',date
('PLS',date
('XML',date
('OAU',date
('ERM',date
('PRO',date
('RSD',date
'1999-04-12',7902,'DALLAS' );
'1999-08-10',7566,'CHICAGO');
'1999-10-04',7369,'SEATTLE');
'1999-12-13',7369,'DALLAS' );
'1999-12-13',7566,'SEATTLE');
'2000-02-03',7369,'DALLAS' );
'2000-02-01',7876,'DALLAS' );
'2000-09-11',7788,'DALLAS' );
'2000-09-18',NULL,'SEATTLE');
'2000-09-27',7902,'DALLAS' );
'2001-01-15',NULL, NULL
);
'2001-02-19',NULL,'DALLAS' );
'2001-02-24',7788,'CHICAGO');
);
);
);
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
registrations
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
(7876,'SQL',date
(7788,'SQL',date
(7839,'SQL',date
(7902,'SQL',date
(7902,'SQL',date
(7698,'SQL',date
(7521,'OAU',date
(7900,'OAU',date
(7902,'OAU',date
(7844,'OAU',date
(7499,'JAV',date
(7782,'JAV',date
(7876,'JAV',date
(7788,'JAV',date
(7839,'JAV',date
(7566,'JAV',date
(7788,'JAV',date
(7698,'JAV',date
(7900,'XML',date
(7499,'XML',date
(7566,'PLS',date
(7499,'PLS',date
(7876,'PLS',date
'1999-04-12',2
);
'1999-10-04',NULL);
'1999-10-04',3
);
'1999-10-04',4
);
'1999-12-13',NULL);
'1999-12-13',NULL);
'1999-08-10',4
);
'1999-08-10',4
);
'1999-08-10',5
);
'2000-09-27',5
);
'1999-12-13',2
);
'1999-12-13',5
);
'1999-12-13',5
);
'1999-12-13',5
);
'1999-12-13',4
);
'2000-02-01',3
);
'2000-02-01',4
);
'2000-02-01',5
);
'2000-02-03',4
);
'2000-02-03',5
);
'2000-09-11',NULL);
'2000-09-11',NULL);
'2000-09-11',NULL);
-- ================================================================
-- HISTORY (empno,beginyear,begindate,enddate,deptno,msal,comments)
-- ================================================================
alter table history disable primary key cascade;
truncate table history;
alter session
set NLS_DATE_FORMAT='DD-MM-YYYY';
insert
insert
insert
insert
-insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
-insert
insert
-insert
insert
insert
insert
insert
insert
-insert
-insert
insert
insert
insert
insert
insert
insert
into
into
into
into
history
history
history
history
values
values
values
values
(7521,1992,'15-12-1992','01-10-1994',30,1250,'');
(7521,1994,'01-10-1994','01-10-1997',20,1250,'');
(7521,1997,'01-10-1997','01-02-2000',30,1300,'');
(7521,2000,'01-02-2000', NULL
,30,1250,'');
================================================
into history values (7566,1982,'01-01-1982','01-12-1982',20, 900,'');
into history values (7566,1982,'01-12-1982','15-08-1984',20, 950,'');
into history values (7566,1984,'15-08-1984','01-01-1986',30,1000,
'Not a great trainer; let''s try the sales department!');
into history values (7566,1986,'01-01-1986','01-07-1986',30,1175,
'Sales also turns out to be not a success...');
into history values (7566,1986,'01-07-1986','15-03-1987',10,1175,'');
into history values (7566,1987,'15-03-1987','01-04-1987',10,2200,'');
into history values (7566,1987,'01-04-1987','01-06-1989',10,2300,'');
into history values (7566,1989,'01-06-1989','01-07-1992',40,2300,
'From accounting to human resources; 0% salary change');
into history values (7566,1992,'01-07-1992','01-11-1992',40,2450,'');
into history values (7566,1992,'01-11-1992','01-09-1994',20,2600,
'Back to the training department, as manager');
into history values (7566,1994,'01-09-1994','01-03-1995',20,2550,'');
into history values (7566,1995,'01-03-1995','15-10-1999',20,2750,'');
into history values (7566,1999,'15-10-1999', NULL
,20,2975,'');
================================================
into history values (7654,1999,'01-01-1999','15-10-1999',30,1100,
'Senior sales rep; high potential?');
into history values (7654,1999,'15-10-1999', NULL
,30,1250,
'Turns out to be slightly disappointing :-( ');
================================================
into history values (7698,1982,'01-06-1982','01-01-1983',30, 900,'');
into history values (7698,1983,'01-01-1983','01-01-1984',30,1275,'');
into history values (7698,1984,'01-01-1984','15-04-1985',30,1500,'');
into history values (7698,1985,'15-04-1985','01-01-1986',30,2100,'');
into history values (7698,1986,'01-01-1986','15-10-1989',30,2200,'');
into history values (7698,1989,'15-10-1989', NULL
,30,2850,
'Promoted to become manager of the sales department');
================================================
into history values (7782,1988,'01-07-1988', NULL
,10,2450,
'Hired as the new manager for the accounting department');
================================================
into history values (7788,1982,'01-07-1982','01-01-1983',20, 900,'');
into history values (7788,1983,'01-01-1983','15-04-1985',20, 950,'');
into history values (7788,1985,'15-04-1985','01-06-1985',40, 950,
'Transfer to human resources; 0% salary raise');
into history values (7788,1985,'01-06-1985','15-04-1986',40,1100,'');
into history values (7788,1986,'15-04-1986','01-05-1986',20,1100,'');
into history values (7788,1986,'01-05-1986','15-02-1987',20,1800,'');
into history values (7788,1987,'15-02-1987','01-12-1989',20,1250,
'Salary reduction 550, insufficient achievements');
insert
insert
insert
insert
insert
insert
-insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
-insert
insert
insert
insert
-insert
insert
-insert
-insert
insert
insert
insert
insert
-insert
insert
insert
insert
into
into
into
into
into
into
history
history
history
history
history
history
values
values
values
values
values
values
(7788,1989,'01-12-1989','15-10-1992',20,1350,'');
(7788,1992,'15-10-1992','01-01-1998',20,1400,'');
(7788,1998,'01-01-1998','01-01-1999',20,1700,'');
(7788,1999,'01-01-1999','01-07-1999',20,1800,'');
(7788,1999,'01-07-1999','01-06-2000',20,1800,'');
(7788,2000,'01-06-2000', NULL
,20,3000,'');
================================================
into history values (7839,1982,'01-01-1982','01-08-1982',30,1000,
'Founder and first employee of the company');
into history values (7839,1982,'01-08-1982','15-05-1984',30,1200,'');
into history values (7839,1984,'15-05-1984','01-01-1985',30,1500,'');
into history values (7839,1985,'01-01-1985','01-07-1985',30,1750,'');
into history values (7839,1985,'01-07-1985','01-11-1985',10,2000,
'Accounting established as an independent department');
into history values (7839,1985,'01-11-1985','01-02-1986',10,2200,'');
into history values (7839,1986,'01-02-1986','15-06-1989',10,2500,'');
into history values (7839,1989,'15-06-1989','01-12-1993',10,2900,'');
into history values (7839,1993,'01-12-1993','01-09-1995',10,3400,'');
into history values (7839,1995,'01-09-1995','01-10-1997',10,4200,'');
into history values (7839,1997,'01-10-1997','01-10-1998',10,4500,'');
into history values (7839,1998,'01-10-1998','01-11-1999',10,4800,'');
into history values (7839,1999,'01-11-1999','15-02-2000',10,4900,'');
into history values (7839,2000,'15-02-2000', NULL
,10,5000,'');
================================================
into history values (7844,1995,'01-05-1995','01-01-1997',30, 900,'');
into history values (7844,1998,'15-10-1998','01-11-1998',10,1200,
'Project (half a month) for the ACCOUNTING department');
into history values (7844,1998,'01-11-1998','01-01-2000',30,1400,'');
into history values (7844,2000,'01-01-2000', NULL
,30,1500,'');
================================================
into history values (7876,2000,'01-01-2000','01-02-2000',20, 950,'');
into history values (7876,2000,'01-02-2000', NULL
,20,1100,'');
================================================
into history values (7900,2000,'01-07-2000', NULL
,30, 800,
'Junior sales rep -- has lots to learn... :-)');
================================================
into history values (7902,1998,'01-09-1998','01-10-1998',40,1400,'');
into history values (7902,1998,'01-10-1998','15-03-1999',30,1650,'');
into history values (7902,1999,'15-03-1999','01-01-2000',30,2500,'');
into history values (7902,2000,'01-01-2000','01-08-2000',30,3000,'');
into history values (7902,2000,'01-08-2000', NULL
,20,3000,'');
================================================
into history values (7934,1998,'01-02-1998','01-05-1998',10,1275,'');
into history values (7934,1998,'01-05-1998','01-02-1999',10,1280,'');
into history values (7934,1999,'01-02-1999','01-01-2000',10,1290,'');
into history values (7934,2000,'01-01-2000', NULL
,10,1300,'');
-- ==============================
-- Enable foreign key constraints
-- ==============================
alter table employees
alter table departments
alter
alter
alter
alter
alter
alter
alter
alter
alter
enable
enable
enable
enable
enable
enable
enable
enable
enable
table
table
table
table
table
table
table
table
table
employees
employees
departments
offerings
offerings
registrations
registrations
history
history
constraint
constraint
constraint
constraint
constraint
constraint
constraint
constraint
constraint
E_MGR_FK;
E_DEPT_FK;
D_MGR_FK;
O_COURSE_FK;
O_TRAIN_FK;
R_OFF_FK;
R_ATT_FK;
H_EMPNO_FK;
H_DEPT_FK;
-- ===========================================
-- Collect object statistics for the optimizer
-- ===========================================
execute dbms_stats.gather_schema_stats(ownname => user, cascade => true);