0% found this document useful (0 votes)
8 views

lab Oracle Assignment

The document outlines an advanced database assignment involving the creation of an Oracle database schema for a secondary school. It includes the definition of object types for Employee, Project, Contractor, and Material, along with their respective procedures and functions. Additionally, it demonstrates the creation of tables and example data insertion for each object type.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

lab Oracle Assignment

The document outlines an advanced database assignment involving the creation of an Oracle database schema for a secondary school. It includes the definition of object types for Employee, Project, Contractor, and Material, along with their respective procedures and functions. Additionally, it demonstrates the creation of tables and example data insertion for each object type.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

College of computing and Informatics

Department of Computer Science


Advanced database Individual Assignment Lab
Oracle
Section One
NAME ID_NO
1 AFENDI MOHAMMED MENGISTU 0597/16

SUBMITTED TO: MR BAHAR


SUBMISSION DATE : MAY 15 2025
-- Create the schema (user)
CREATE USER hararsenior_secondary_school IDENTIFIED BY password;

-- Grant necessary privileges to the new user


GRANT CONNECT, RESOURCE, DBA TO hararsenior_secondary_school;

-- Connect as the new user


-- ALTER SESSION SET CURRENT_SCHEMA = hararsenior_secondary_school;

-- 1. Create Employee object type


CREATE OR REPLACE TYPE Employee AS OBJECT (
employee_id NUMBER,
name VARCHAR2(100),
gender VARCHAR2(10),
salary NUMBER,
project_id NUMBER, -- Foreign key to Project
MEMBER PROCEDURE hire(new_name IN VARCHAR2, new_gender IN VARCHAR2, new_salary IN NUMBER,
new_project_id IN NUMBER),
MEMBER PROCEDURE fire,
MEMBER FUNCTION calculate_bonus(overtime_hours IN NUMBER) RETURN NUMBER,
MEMBER PROCEDURE display_employee_id,
MEMBER PROCEDURE display_employee_info
);

-- 2. Create Project object type with budget and funds management


CREATE OR REPLACE TYPE Project AS OBJECT (
project_id NUMBER,
project_name VARCHAR2(100),
location VARCHAR2(100),
contract_duration DATE,
budget NUMBER, -- Total project budget
funds_available NUMBER, -- Available funds for the project
MEMBER FUNCTION cancel_contract RETURN VARCHAR2,
MEMBER FUNCTION calculate_budget_status RETURN VARCHAR2, -- Calculate budget status
MEMBER PROCEDURE add_funds(amount IN NUMBER), -- Add funds to the project
MEMBER PROCEDURE display_project_info
);

-- 3. Create Contractor object type


CREATE OR REPLACE TYPE Contractor AS OBJECT (
contractor_id NUMBER,
name VARCHAR2(100),
license_level VARCHAR2(20),
MEMBER PROCEDURE take_project_contract(new_project_id IN NUMBER),
MEMBER PROCEDURE extend_contract(extension_date IN DATE),
MEMBER PROCEDURE level_up_license(new_license_level IN VARCHAR2),
MEMBER PROCEDURE display_contractor_info
);

-- 4. Create Material object type


CREATE OR REPLACE TYPE Material AS OBJECT (
equipment_id NUMBER,
equipment_name VARCHAR2(100),
manufacture_date DATE,
MEMBER PROCEDURE add_material(purchase_date IN DATE),
MEMBER PROCEDURE delete_material(sell_date IN DATE),
MEMBER PROCEDURE display_material_info
);

-- 5. Create Tables for Employee, Project, Contractor, and Material (using Object Types)

-- Employee Table
CREATE TABLE Employee_table OF Employee (
CONSTRAINT emp_pk PRIMARY KEY (employee_id)
);

-- Project Table
CREATE TABLE Project_table OF Project (
CONSTRAINT proj_pk PRIMARY KEY (project_id)
);

-- Contractor Table
CREATE TABLE Contractor_table OF Contractor (
CONSTRAINT cont_pk PRIMARY KEY (contractor_id)
);

-- Material Table
CREATE TABLE Material_table OF Material (
CONSTRAINT mat_pk PRIMARY KEY (equipment_id)
);

-- Implement the Procedures and Functions for the Object Types

-- 1. Employee Object Procedures and Functions


CREATE OR REPLACE TYPE BODY Employee AS
MEMBER PROCEDURE hire(new_name IN VARCHAR2, new_gender IN VARCHAR2, new_salary IN NUMBER,
new_project_id IN NUMBER) IS
BEGIN
name := new_name;
gender := new_gender;
salary := new_salary;
project_id := new_project_id;
END hire;

MEMBER PROCEDURE fire IS


BEGIN
name := NULL;
gender := NULL;
salary := NULL;
project_id := NULL;
END fire;

MEMBER FUNCTION calculate_bonus(overtime_hours IN NUMBER) RETURN NUMBER IS


BEGIN
-- Assuming bonus is 10% of salary for every 10 hours of overtime
RETURN (salary * 0.1) * (overtime_hours / 10);
END calculate_bonus;

MEMBER PROCEDURE display_employee_id IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || employee_id);
END display_employee_id;

MEMBER PROCEDURE display_employee_info IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || employee_id);
DBMS_OUTPUT.PUT_LINE('Name: ' || name);
DBMS_OUTPUT.PUT_LINE('Gender: ' || gender);
DBMS_OUTPUT.PUT_LINE('Salary: ' || salary);
DBMS_OUTPUT.PUT_LINE('Project ID: ' || project_id);
END display_employee_info;
END;

-- 2. Project Object Functions


CREATE OR REPLACE TYPE BODY Project AS
MEMBER FUNCTION cancel_contract RETURN VARCHAR2 IS
BEGIN
IF contract_duration < SYSDATE THEN
RETURN 'Project contract has ended and is canceled.';
ELSE
RETURN 'Project contract is still active.';
END IF;
END cancel_contract;

MEMBER FUNCTION calculate_budget_status RETURN VARCHAR2 IS


BEGIN
IF funds_available >= budget THEN
RETURN 'Sufficient funds available for the project.';
ELSIF funds_available < budget THEN
RETURN 'Insufficient funds. Project requires additional funding.';
ELSE
RETURN 'Project budget has not been set yet.';
END IF;
END calculate_budget_status;

MEMBER PROCEDURE add_funds(amount IN NUMBER) IS


BEGIN
funds_available := funds_available + amount;
DBMS_OUTPUT.PUT_LINE('Funds added: ' || amount || '. New available funds: ' || funds_available);
END add_funds;

MEMBER PROCEDURE display_project_info IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Project ID: ' || project_id);
DBMS_OUTPUT.PUT_LINE('Project Name: ' || project_name);
DBMS_OUTPUT.PUT_LINE('Location: ' || location);
DBMS_OUTPUT.PUT_LINE('Contract Duration: ' || TO_CHAR(contract_duration, 'DD-MON-YYYY'));
DBMS_OUTPUT.PUT_LINE('Budget: ' || budget);
DBMS_OUTPUT.PUT_LINE('Funds Available: ' || funds_available);
END display_project_info;
END;

-- 3. Contractor Object Procedures


CREATE OR REPLACE TYPE BODY Contractor AS
MEMBER PROCEDURE take_project_contract(new_project_id IN NUMBER) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Contractor ' || name || ' takes the project contract with ID ' ||
new_project_id);
END take_project_contract;

MEMBER PROCEDURE extend_contract(extension_date IN DATE) IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Contract for contractor ' || name || ' extended until ' ||
TO_CHAR(extension_date, 'DD-MON-YYYY'));
END extend_contract;

MEMBER PROCEDURE level_up_license(new_license_level IN VARCHAR2) IS


BEGIN
license_level := new_license_level;
DBMS_OUTPUT.PUT_LINE('Contractor ' || name || ' license level upgraded to ' || license_level);
END level_up_license;

MEMBER PROCEDURE display_contractor_info IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Contractor ID: ' || contractor_id);
DBMS_OUTPUT.PUT_LINE('Contractor Name: ' || name);
DBMS_OUTPUT.PUT_LINE('License Level: ' || license_level);
END display_contractor_info;
END;

-- 4. Material Object Procedures


CREATE OR REPLACE TYPE BODY Material AS
MEMBER PROCEDURE add_material(purchase_date IN DATE) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Material ' || equipment_name || ' added on ' || TO_CHAR(purchase_date,
'DD-MON-YYYY'));
END add_material;

MEMBER PROCEDURE delete_material(sell_date IN DATE) IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Material ' || equipment_name || ' sold on ' || TO_CHAR(sell_date, 'DD-MON-
YYYY'));
END delete_material;

MEMBER PROCEDURE display_material_info IS


BEGIN
DBMS_OUTPUT.PUT_LINE('Equipment ID: ' || equipment_id);
DBMS_OUTPUT.PUT_LINE('Equipment Name: ' || equipment_name);
DBMS_OUTPUT.PUT_LINE('Manufacture Date: ' || TO_CHAR(manufacture_date, 'DD-MON-YYYY'));
END display_material_info;
END;

-- Example Insert for Employee, Project, Contractor, and Material

-- Insert a Project with budget and funds available


INSERT INTO Project_table VALUES (
1,
'School Building',
'Location A',
TO_DATE('2025-12-31', 'YYYY-MM-DD'),
1000000, -- Budget set to 1 million
500000 -- Initial funds available is 500,000
);
-- Insert an Employee
INSERT INTO Employee_table VALUES (1, 'John Doe', 'Male', 5000, 1);

-- Insert a Contractor
INSERT INTO Contractor_table VALUES (1, 'Jane Smith', 'Intermediate');

-- Insert Material
INSERT INTO Material_table VALUES (1, 'Excavator', TO_DATE('2023-10-15', 'YYYY-MM-DD'));

-- Commit the transaction


COMMIT;

-- Example Usage: Display the budget status and add funds


DECLARE
emp Employee;
proj Project;
cont Contractor;
mat Material;
BEGIN
-- Create an Employee instance
emp := Employee(1, 'John Doe', 'Male', 5000, 1);

-- Display Employee Info


emp.display_employee_info;

-- Create a Project instance and display info


proj := Project(1, 'School Building', 'Location A', TO_DATE('2025-12-31', 'YYYY-MM-DD'), 1000000, 500000);
proj.display_project_info;

-- Create a Contractor instance and display info


cont := Contractor(1, 'Jane Smith', 'Intermediate');
cont.display_contractor_info;
-- Create a Material instance and display info
mat := Material(1, 'Excavator', TO_DATE('2023-10-15', 'YYYY-MM-DD'));
mat.display_material_info;
END;
/

You might also like