After completing this lab you
should be able to:
Due for Project 6
Turn in two SQL files and one output file. Questions 1- 3 (which create your tables) will be saved in one file, while the 2nd script will insert data and then perform the queries asked for in 5-10. SPOOL the output produced by the 2nd script only. Upload Project6_1.sql, Project6_2.sql, Project 6_2.lst into the Drop Box by 11:55 PM on its due date.
Project 6 Assignment, Script 1 Steps
1.
Create a
table for employees (EMPLOYEE). Create the following columns for this table.
Define employee_id as a primary key.
Employee_id varchar2(8) not null
last_name varchar2(40)
first_name varchar2(40)
middle_initial varchar2(1)
dept_id varchar2(4)
title
varchar2(40)
supervisor_id varchar2(8)
Dept_id
varchar2(4) not null
Division_name varchar2(20)
Department_name varchar2(20)
Project 6 Assignment, Script 2 Steps
|
Dept_id |
Division_name |
Department_Name |
|
EBX |
Pharma |
|
|
CP1 |
Corporate |
Finance |
|
CP2 |
Corporate |
Marketing |
|
NOTE: Inserting the value
"R&D" will cause some problems. The & sign indicates to
SQL*Plus that the following string is a SQL*Plus variable. You need to define
an escape character temporarily, % for example. So for example a portion of
your final lab5part2.sql file would look like this: |
|
Employee Name |
Title |
Supervisor |
||
|
EB001 |
Richard Abbott |
EBX |
Director |
|
|
EB002 |
Fred Johnson |
EBX |
Manager |
EB001 |
|
EB103 |
Jan Searle |
EBX |
Technician |
EB002 |
|
EB104 |
Fred W. Lambert |
|
Technician |
EB002 |
|
CP001 |
Judith H. Roche |
CP1 |
Director |
|
|
CP002 |
Smithy K. Glaxo |
CP2 |
Director |
|
|
CP003 |
Amerigus H. Product |
CP1 |
Manager |
CP001 |
|
CP004 |
Helmut Bayer |
CP1 |
Dept. Head |
CP003 |
|
CP005 |
Trent Merck |
CP1 |
Team Leader |
CP004 |
|
CP006 |
Ted Baxter |
CP1 |
clerk |
CP005 |
|
CP007 |
John Underling |
CP1 |
clerk |
CP005 |
|
CP008 |
Susan H. Helper |
|
AA |
CP003 |
|
CP009 |
Joe Dilbert |
CP1 |
clerk |
CP005 |
NOTE: some dept. values
intentionally left null.
|
Here is one way to implement #7. There would be several ways of
doing essentially the same thing. Note however that some "names" in
the worker table are not just first and last name. So this would not be a
complete solution but good enough for lab5. INSERT INTO EMPLOYEE (employee_id, first_name, last_name, dept_id, title, supervisor_id)SELECT substr(name,1,3)|| ltrim(to_char(nvl(age,1),'009')) as employee_id, initcap(substr(name,1,instr(name,' ',1)-1)) as first_name, initcap(substr(name,instr(name,' ',1)+1)) as last_name, 'CP2', 'Salesperson', 'CP002'FROM WORKER; |
8.
Transactional
Control
a)
Commit your changes to the database. Also select COUNT(*)
from employee and department.
b)
Now delete all rows from EMPLOYEE. Select COUNT(*) from
employee. There should be no rows.
c)
Rollback the deletes from EMPLOYEE. Select COUNT(*) from
employee. The rows should all be back.
9. Smithy wants
to change his name. Update his last name from Glaxo to Beecham. Select just
this row to show that it was changed.
10.
Your boss wants some reports on the company. Write the
following queries:
a)
All employee names (formatted as last, first initial) with
their division and department if any. (See Outer Joins).
b)
Show all employee names in one column and their manager’s
name in the second column. Fomat the name as last_name, first_name. If the employee
has no manager, print ‘none’ instead (DECODE).
c)
Starting with each Director print their name (last_name,
first_name middle_initial) and title. Indent the name by 4 spaces and list any
people they manage using the same format as directors. Indent the name by 4
more spaces and list any people they supervise, and so on and so on. This will
produce a hierarchical listing of all employees and who they report to. (See
CONNECT BY / START WITH).
d)
Similar to previous question, write the same query but
also show the employee’s department. Showing department ID is easy, show the
department’s name.