Live ORACLE

if you are Oracle Developer ,than this Blog most likely will make you happy.

About my Blog

This Blog particularized for Oracle Developers ... you will see interesting Codes for SQL , PL/SQL as well as new ideas for Developer Suite and Client Tools that will help you in your professional life ... and I hope I reach for your satisfaction.

About Me

I'm Hany Freedom , 25 years old , I live in EL-Minia City in Egypt , I'm Moderator at ArabOUG.org the best Arabic Forum for ORACLE on the Net. if you interested to know more about me .... just Click Here.

Creating the emp_admin Package


-- create the audit table to track changes
CREATE TABLE emp_audit (
date_of_action DATE,
user_id VARCHAR2(20),
package_name VARCHAR2(30));

CREATE OR REPLACE PACKAGE emp_admin
AS
-- Declare externally visible types, cursor, exception
TYPE emprectyp IS RECORD(emp_id NUMBER,
sal NUMBER);

CURSOR desc_salary RETURN emprectyp;

invalid_salary EXCEPTION;

-- Declare externally callable subprograms
FUNCTION hire_employee(last_name VARCHAR2,first_name VARCHAR2,email VARCHAR2,phone_number VARCHAR2,job_id VARCHAR2,salary NUMBER,commission_pct NUMBER,manager_id NUMBER,department_id NUMBER) RETURN NUMBER;

PROCEDURE fire_employee(emp_id NUMBER); -- overloaded subprogram

PROCEDURE fire_employee(emp_email VARCHAR2); -- overloaded subprogram

PROCEDURE raise_salary(emp_id NUMBER,amount NUMBER);

FUNCTION nth_highest_salary(n NUMBER) RETURN EMPRECTYP;
END emp_admin;
/

CREATE OR REPLACE PACKAGE BODY emp_admin
AS
number_hired NUMBER; -- visible only in this package

-- Fully define cursor specified in package
CURSOR desc_salary RETURN emprectyp IS
SELECT employee_id,
salary
FROM employees
ORDER BY salary DESC;

-- Fully define subprograms specified in package
FUNCTION Hire_employee
(last_name VARCHAR2,
first_name VARCHAR2,
email VARCHAR2,
phone_number VARCHAR2,
job_id VARCHAR2,
salary NUMBER,
commission_pct NUMBER,
manager_id NUMBER,
department_id NUMBER)
RETURN NUMBER
IS
new_emp_id NUMBER;
BEGIN
SELECT employees_seq.nextval
INTO new_emp_id
FROM dual;
INSERT INTO employees
VALUES (new_emp_id,
last_name,
first_name,
email,
phone_number,
SYSDATE,
job_id,
salary,
commission_pct,
manager_id,
department_id);
number_hired := number_hired
+ 1;
dbms_output.Put_line('The number of employees hired is '
||To_char(number_hired));
RETURN new_emp_id;
END hire_employee;

PROCEDURE Fire_employee
(emp_id NUMBER)
IS
BEGIN
DELETE FROM employees
WHERE employee_id = emp_id;
END fire_employee;

PROCEDURE Fire_employee
(emp_email VARCHAR2)
IS
BEGIN
DELETE FROM employees
WHERE email = emp_email;
END fire_employee;

-- Define local function, available only inside package
FUNCTION Sal_ok
(jobid VARCHAR2,
sal NUMBER)
RETURN BOOLEAN
IS
min_sal NUMBER;
max_sal NUMBER;
BEGIN
SELECT Min(salary),
Max(salary)
INTO min_sal,max_sal
FROM employees
WHERE job_id = jobid;
RETURN (sal >= min_sal)
AND (sal <= max_sal);
END sal_ok;

PROCEDURE Raise_salary
(emp_id NUMBER,
amount NUMBER)
IS
sal NUMBER(8,2);
jobid VARCHAR2(10);
BEGIN
SELECT job_id,
salary
INTO jobid,sal
FROM employees
WHERE employee_id = emp_id;
IF Sal_ok(jobid,sal
+ amount) THEN
UPDATE employees
SET salary = salary
+ amount
WHERE employee_id = emp_id;
ELSE
RAISE invalid_salary;
END IF;
EXCEPTION -- exception-handling part starts here

WHEN invalid_salary THEN
dbms_output.Put_line('The salary is out of the specified range.');
END raise_salary;

FUNCTION Nth_highest_salary
(n NUMBER)
RETURN EMPRECTYP
IS
emp_rec EMPRECTYP;
BEGIN
OPEN desc_salary;
FOR i IN 1.. n LOOP
FETCH desc_salary INTO emp_rec;
END LOOP;
CLOSE desc_salary;
RETURN emp_rec;
END nth_highest_salary;
BEGIN -- initialization part starts here

INSERT INTO emp_audit
VALUES (SYSDATE,
USER,
'EMP_ADMIN');
number_hired := 0;
END emp_admin;
/

-- calling the package procedures
DECLARE
new_emp_id NUMBER(6);
BEGIN
new_emp_id := emp_admin.Hire_employee('Belden','Enrique','EBELDEN','555.111.2222',
'ST_CLERK',2500,.1,101,110);
dbms_output.Put_line('The new employee id is '
||To_char(new_emp_id));
emp_admin.Raise_salary(new_emp_id,100);
dbms_output.Put_line('The 10th highest salary is '
||To_char(emp_admin.Nth_highest_salary(10).sal)
||', belonging to employee: '
||To_char(emp_admin.Nth_highest_salary(10).emp_id));
emp_admin.Fire_employee(new_emp_id);
-- you could also delete the newly added employee as follows:
-- emp_admin.fire_employee('EBELDEN');
END;
/



OUTPUT of calling the package procedures:

The number of employees hired is 1
The new employee id is 207
The 10th highest salary is 11500, belonging to employee: 168

PL/SQL procedure successfully completed.

Share/Save/Bookmark

0 comments:

Post a Comment



Newer Posts Older Posts Home Page
 
http://www.dpriver.com/images/sqlpp-banner-2.png

Thanks for reading my Blog ... you Visitor Number :-