OneCompiler

0909

1634

CREATE TABLE jobs (
job_id VARCHAR2(10) PRIMARY KEY,
job_title VARCHAR2(35) NOT NULL
);

CREATE OR REPLACE PACKAGE JOB_PKG IS
PROCEDURE add_job(p_job_id IN VARCHAR2, p_job_title IN VARCHAR2);
PROCEDURE upd_job(p_job_id IN VARCHAR2, p_job_title IN VARCHAR2);
PROCEDURE del_job(p_job_id IN VARCHAR2);
PROCEDURE get_job(p_job_id IN VARCHAR2, p_job_title OUT VARCHAR2);
END JOB_PKG;

CREATE OR REPLACE PACKAGE BODY JOB_PKG IS

PROCEDURE add_job(p_job_id IN VARCHAR2, p_job_title IN VARCHAR2) IS
BEGIN
    INSERT INTO jobs (job_id, job_title) VALUES (p_job_id, p_job_title);
EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
        RAISE_APPLICATION_ERROR(-20001, 'Job ID already exists.');
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20002, 'An unexpected error occurred: ' || SQLERRM);
END add_job;

PROCEDURE upd_job(p_job_id IN VARCHAR2, p_job_title IN VARCHAR2) IS
BEGIN
    UPDATE jobs
    SET job_title = p_job_title
    WHERE job_id = p_job_id;
    
    IF SQL%NOTFOUND THEN
        RAISE_APPLICATION_ERROR(-20003, 'Job ID not found.');
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20004, 'An unexpected error occurred: ' || SQLERRM);
END upd_job;

PROCEDURE del_job(p_job_id IN VARCHAR2) IS
BEGIN
    DELETE FROM jobs
    WHERE job_id = p_job_id;
    
    IF SQL%NOTFOUND THEN
        RAISE_APPLICATION_ERROR(-20005, 'Job ID not found.');
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20006, 'An unexpected error occurred: ' || SQLERRM);
END del_job;

PROCEDURE get_job(p_job_id IN VARCHAR2, p_job_title OUT VARCHAR2) IS
BEGIN
    SELECT job_title
    INTO p_job_title
    FROM jobs
    WHERE job_id = p_job_id;
    
    IF SQL%NOTFOUND THEN
        RAISE_APPLICATION_ERROR(-20007, 'Job ID not found.');
    END IF;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RAISE_APPLICATION_ERROR(-20007, 'Job ID not found.');
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20008, 'An unexpected error occurred: ' || SQLERRM);
END get_job;

END JOB_PKG;