You are on page 1of 10

Practica 2

CREATE OR REPLACE PROCEDURE add_job


(p_jobid IN jobs.job_id%TYPE,
p_jobtitle IN jobs.job_title%TYPE)
IS
BEGIN
INSERT INTO jobs (job_id, job_title)
VALUES (p_jobid, p_jobtitle);
COMMIT;
END add_job;

EXECUTE add_job ('IT_DBA', 'Database Administrator')


SELECT * FROM jobs WHERE job_id = 'IT_DBA';
CREATE OR REPLACE PROCEDURE upd_job
(p_jobid IN jobs.job_id%TYPE,
p_jobtitle IN jobs.job_title%TYPE)
IS
BEGIN
UPDATE jobs
SET job_title = p_jobtitle
WHERE job_id = p_jobid;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20202,'No job updated.');
END IF;
END upd_job;
CREATE OR REPLACE PROCEDURE del_job
(p_jobid IN jobs.job_id%TYPE)
IS

BEGIN
DELETE FROM jobs
WHERE job_id = p_jobid;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20203,'No jobs deleted.');
END IF;
END DEL_JOB; REATE OR REPLACE PROCEDURE query_emp
(p_empid IN employees.employee_id%TYPE,
p_sal OUT employees.salary%TYPE,
p_job OUT employees.job_id%TYPE)
IS
BEGIN
SELECT salary, job_id
INTO p_sal, p_job
FROM employees
WHERE employee_id = p_empid;
END query_emp;
VARIABLE sal NUMBER
VARIABLE job VARCHAR(10)
EXECUTE query_emp (120, :g_sal, :g_job)
PRINT sal
PRINT job

Practica 3
CREATE OR REPLACE FUNCTION q_job
(p_jobid IN jobs.job_id%TYPE)
RETURN VARCHAR2
IS
v_jobtitle jobs.job_title%TYPE;
BEGIN
SELECT job_title
INTO v_jobtitle
FROM jobs
WHERE job_id = p_jobid;
RETURN (v_jobtitle);
END q_job;
VARIABLE g_title VARCHAR2(30)
EXECUTE :g_title := q_job ('SA_REP')
PRINT g_title
CREATE OR REPLACE FUNCTION annual_comp
(p_sal IN employees.salary%TYPE,
p_comm IN employees.commission_pct%TYPE)
RETURN NUMBER
IS
BEGIN
RETURN (NVL(p_sal,0) * 12 + (NVL(p_comm,0)* p_sal * 12));
END annual_comp;
/
CREATE OR REPLACE FUNCTION valid_deptid
(p_deptid IN departments.department_id%TYPE)
RETURN BOOLEAN
IS

v_dummy VARCHAR2(1);
BEGIN
SELECT 'x'
INTO v_dummy
FROM departments
WHERE department_id = p_deptid;
RETURN (TRUE);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN (FALSE);
END valid_deptid;
/
CREATE OR REPLACE PROCEDURE new_emp
( lname employees.last_name%TYPE,
fname employees.first_name%TYPE,
email employees.email%TYPE,
job employees.job_id%TYPE DEFAULT 'SA_REP',
mgr employees.manager_id%TYPE DEFAULT 145,
sal employees.salary%TYPE DEFAULT 1000,
comm employees.commission_pct%TYPE DEFAULT 0,
deptid employees.department_id%TYPE DEFAULT 30)
IS
BEGIN
IF valid_deptid( deptid) THEN
INSERT INTO employees(employee_id, last_name, first_name,
email, job_id, manager_id, hire_date,
salary, commission_pct, department_id)
VALUES (employees_seq.NEXTVAL, lname, fname, email,
job, mgr, TRUNC (SYSDATE, 'DD'), sal,

comm, deptid);
ELSE
RAISE_APPLICATION_ERROR (-20204,
'Invalid department ID. Try again.');
END IF;
END new_emp;
/
Practica 5
CREATE OR REPLACE PACKAGE BODY job_pack IS
PROCEDURE add_job
( jobid IN jobs.job_id%TYPE,
jobtitle IN jobs.job_title%TYPE)
IS
BEGIN
INSERT INTO jobs (job_id, job_title)
VALUES ( jobid, jobtitle);
END add_job;
PROCEDURE upd_job
( jobid IN jobs.job_id%TYPE,
jobtitle IN jobs.job_title%TYPE)
IS
BEGIN
UPDATE jobs
SET job_title = jobtitle
WHERE job_id = jobid;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20202,'No job updated.');
END IF;
END upd_job;

PROCEDURE del_job
( jobid IN jobs.job_id%TYPE)
IS
BEGIN
DELETE FROM jobs
WHERE job_id = jobid;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR (-20203,'No job deleted.');
END IF;
END del_job;
FUNCTION q_job
( jobid IN jobs.job_id%TYPE)
RETURN VARCHAR2
IS
jobtitle jobs.job_title%TYPE;
BEGIN
SELECT job_title
INTO jobtitle
FROM jobs
WHERE job_id = jobid;
RETURN ( jobtitle);
END q_job;
END job_pack;
/
CREATE OR REPLACE PACKAGE emp_pack IS
PROCEDURE new_emp
(p_lname employees.last_name%TYPE,
p_fname employees.first_name%TYPE,
p_email employees.email%TYPE,

p_job employees.job_id%TYPE DEFAULT 'SA_REP',


p_mgr employees.manager_id%TYPE DEFAULT 145,
p_sal employees.salary%TYPE DEFAULT 1000,
p_comm employees.commission_pct%TYPE DEFAULT 0,
p_deptid employees.department_id%TYPE DEFAULT 80);
END emp_pack;
/
CREATE OR REPLACE PACKAGE BODY emp_pack IS
FUNCTION valid_deptid
(p_deptid IN departments.department_id%TYPE)
RETURN BOOLEAN
IS
v_dummy VARCHAR2(1);
BEGIN
SELECT 'x'
INTO v_dummy
FROM departments
WHERE department_id = p_deptid;
RETURN (TRUE);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN(FALSE);
END valid_deptid;
PROCEDURE new_emp
(p_lname employees.last_name%TYPE,
p_fname employees.first_name%TYPE,
p_email employees.email%TYPE,
p_job employees.job_id%TYPE DEFAULT 'SA_REP',
p_mgr employees.manager_id%TYPE DEFAULT 145,

p_sal employees.salary%TYPE DEFAULT 1000,


p_comm employees.commission_pct%TYPE DEFAULT 0,
p_deptid employees.department_id%TYPE DEFAULT 80)
IS
BEGIN
IF valid_deptid(p_deptid) THEN
INSERT INTO employees (employee_id, last_name, first_name,
email, job_id, manager_id, hire_date, salary, commission_pct,
department_id)
VALUES (employees_seq.NEXTVAL, p_lname, p_fname, p_email,
p_job, p_mgr, TRUNC (SYSDATE, 'DD'), p_sal, p_comm,
p_deptid);
ELSE
RAISE_APPLICATION_ERROR (-20205,
'Invalid department number. Try again.');
END IF;
END new_emp;
END emp_pack;
/

PRACTICA 6
CREATE OR REPLACE PACKAGE over_load IS
FUNCTION print_it(p_arg IN DATE)
RETURN VARCHAR2;
FUNCTION print_it(p_arg IN VARCHAR2)
RETURN NUMBER;
END over_load;
/CREATE OR REPLACE PACKAGE BODY over_load
IS
FUNCTION print_it(p_arg IN DATE)
RETURN VARCHAR2
IS
BEGIN
RETURN to_char(p_arg, 'FmMonth,dd yyyy');
END print_it;
FUNCTION print_it(p_arg IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
RETURN TO_NUMBER(p_arg, '999,999.00');
-- or use the NLS characters for grands and decimals
-- RETURN TO_NUMBER(p_arg, '999G999D00');
END print_it;
END over_load
CREATE OR REPLACE PACKAGE BODY check_pack
IS
i NUMBER := 0;
CURSOR emp_cur IS
SELECT department_id, job_id

FROM employees;
TYPE emp_table_type IS TABLE OF emp_cur%ROWTYPE
INDEX BY BINARY_INTEGER;
deptid_job emp_table_type;
PROCEDURE chk_dept_job
(p_deptid in employees.department_id%TYPE,
p_job in employees.job_id%TYPE)
IS
BEGIN
FOR k IN deptid_job.FIRST .. deptid_job.LAST LOOP
IF p_deptid = deptid_job(k).department_id
AND p_job = deptid_job(k).job_id THEN
RETURN;
END IF;
END LOOP;
RAISE_APPLICATION_ERROR
(-20500, 'Not a valid job for this dept');
END chk_dept_job;
BEGIN -- one-time-only-procedure
FOR emp_rec IN emp_cur LOOP
deptid_job(i) := emp_rec;
i := i + 1;
END LOOP;
END check_pack;
/

You might also like