-- SPECS
CREATE OR REPLACE PACKAGE MY_PKG
IS
FUNCTION GET_DEPT_NAME (P_EMP_ID NUMBER) RETURN VARCHAR2 ;
FUNCTION GET_JOB_TITLE (P_EMP_ID NUMBER) RETURN VARCHAR2 ;
PROCEDURE ADD_SALARY (P_EMP_ID NUMBER , P_AMOUNT NUMBER ) ;
END MY_PKG ;
-------------------------
-- BODY
CREATE OR REPLACE PACKAGE BODY MY_PKG
IS
FUNCTION GET_DEPT_NAME (P_EMP_ID NUMBER)
RETURN VARCHAR2
IS
V_DEPT_NAME VARCHAR2(200);
BEGIN
SELECT DEPARTMENT_NAME
INTO V_DEPT_NAME
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND E.EMPLOYEE_ID = P_EMP_ID ;
RETURN V_DEPT_NAME ;
EXCEPTION WHEN NO_DATA_FOUND THEN
RETURN NULL;
END GET_DEPT_NAME;
FUNCTION GET_JOB_TITLE (P_EMP_ID NUMBER)
RETURN VARCHAR2
IS
V_JOB_TITLE VARCHAR2(200);
BEGIN
SELECT JOB_TITLE
INTO V_JOB_TITLE
FROM EMPLOYEES E, JOBS D
WHERE E.JOB_ID = D.JOB_ID
AND E.EMPLOYEE_ID = P_EMP_ID ;
RETURN V_JOB_TITLE ;
EXCEPTION WHEN NO_DATA_FOUND THEN
RETURN NULL;
END GET_JOB_TITLE ;
PROCEDURE ADD_SALARY (P_EMP_ID NUMBER , P_AMOUNT NUMBER )
IS
BEGIN
UPDATE EMPLOYEES
SET SALARY = SALARY + P_AMOUNT
WHERE EMPLOYEE_ID = P_EMP_ID ;
END ADD_SALARY ;
END MY_PKG ;
---------------------------####################
-- SPECS
CREATE OR REPLACE PACKAGE MY_OVER_LOAD
IS
FUNCTION GET_EMP_DATA (P_EMP_ID NUMBER ) RETURN VARCHAR2 ;
FUNCTION GET_EMP_DATA (P_JOB_ID VARCHAR2 ) RETURN VARCHAR2 ;
FUNCTION GET_EMP_DATA (P_EMP_ID NUMBER , P_DEPT_ID NUMBER ) RETURN VARCHAR2 ;
FUNCTION GET_EMP_DATA (P_EMP_ID NUMBER , P_JOB_ID VARCHAR2 ) RETURN VARCHAR2 ;
PROCEDURE GET_EMP_DATA (P_EMP_ID NUMBER , P_JOB_ID VARCHAR2 ) ;
END MY_OVER_LOAD ;
----------------------------------------
-- BODY
CREATE OR REPLACE PACKAGE BODY MY_OVER_LOAD
IS
FUNCTION GET_EMP_DATA (P_EMP_ID NUMBER ) RETURN VARCHAR2
IS
V_LAST_NAME VARCHAR2(100);
BEGIN
SELECT LAST_NAME
INTO V_LAST_NAME
FROM EMPLOYEES
WHERE EMPLOYEE_ID = P_EMP_ID ;
RETURN V_LAST_NAME ;
END GET_EMP_DATA;
FUNCTION GET_EMP_DATA (P_JOB_ID VARCHAR2 ) RETURN VARCHAR2
IS
V_JOB VARCHAR2(100);
BEGIN
SELECT JOB_TITLE
INTO V_JOB
FROM JOBS
WHERE JOB_ID = P_JOB_ID ;
RETURN V_JOB ;
END GET_EMP_DATA;
FUNCTION GET_EMP_DATA(P_EMP_ID NUMBER , P_DEPT_ID NUMBER ) RETURN VARCHAR2
IS
V_NAME VARCHAR2(100);
BEGIN
SELECT DEPARTMENT_NAME
INTO V_NAME
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND E.EMPLOYEE_ID = P_EMP_ID
-- AND ( E.DEPARTMENT_ID = P_DEPT_ID OR :P_D_ID IS NULL )
AND E.DEPARTMENT_ID = NVL(P_DEPT_ID , E.DEPARTMENT_ID ) ;
RETURN V_NAME ;
END GET_EMP_DATA;
FUNCTION GET_EMP_DATA (P_EMP_ID NUMBER , P_JOB_ID VARCHAR2 ) RETURN VARCHAR2
IS
V_NAME VARCHAR2(100);
BEGIN
SELECT JOB_TITLE
INTO V_NAME
FROM EMPLOYEES E, JOBS D
WHERE E.JOB_ID = D.JOB_ID
AND E.EMPLOYEE_ID = P_EMP_ID
-- AND ( E.DEPARTMENT_ID = P_DEPT_ID OR :P_D_ID IS NULL )
AND E.JOB_ID = NVL(P_JOB_ID , E.JOB_ID ) ;
RETURN V_NAME ;
END GET_EMP_DATA ;
PROCEDURE GET_EMP_DATA (P_EMP_ID NUMBER , P_JOB_ID VARCHAR2 )
IS
BEGIN
DBMS_OUTPUT.PUT_LINE (P_EMP_ID||P_JOB_ID );
END GET_EMP_DATA ;
END MY_OVER_LOAD ;
----------------------
CREATE OR REPLACE PACKAGE GLOBAL_PKG
IS
V_DEPT_ID NUMBER ;
V_EMP_ID NUMBER ;
FUNCTION GET_V_DEPT_ID RETURN NUMBER ;
PROCEDURE SET_V_DEPT_ID (P_DEPT_ID NUMBER) ;
FUNCTION GET_V_EMP_ID RETURN NUMBER ;
PROCEDURE SET_V_EMP_ID (P_EMPiD NUMBER) ;
END ;
------------
CREATE OR REPLACE PACKAGE BODY GLOBAL_PKG
IS
FUNCTION GET_V_DEPT_ID RETURN NUMBER
IS
BEGIN
RETURN V_DEPT_ID ;
END GET_V_DEPT_ID;
PROCEDURE SET_V_DEPT_ID (P_DEPT_ID NUMBER)
IS
BEGIN
V_DEPT_ID := P_DEPT_ID ;
END SET_V_DEPT_ID;
FUNCTION GET_V_EMP_ID RETURN NUMBER
IS
BEGIN
RETURN V_EMP_ID ;
END GET_V_EMP_ID;
PROCEDURE SET_V_EMP_ID (P_EMPiD NUMBER)
IS
BEGIN
V_EMP_ID := P_EMPiD ;
END SET_V_EMP_ID;
END GLOBAL_PKG ;
---------------
CREATE OR REPLACE VIEW EMPS_VW
AS
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID = NVL( GLOBAL_PKG.GET_V_DEPT_ID , DEPARTMENT_ID )
AND EMPLOYEE_ID = NVL( GLOBAL_PKG.GET_V_EMP_ID , EMPLOYEE_ID )
-----------
SELECT *
FROM EMPS_VW
SELECT GLOBAL_PKG.GET_V_DEPT_ID
FROM DUAL
BEGIN GLOBAL_PKG.SET_V_DEPT_ID (100) ;
GLOBAL_PKG.SET_V_EMP_ID (110) ;
END ;
------------------------
CREATE OR REPLACE PROCEDURE SET_REF_CURSOR (P_TABLE_NAME VARCHAR2 )
IS
TYPE T_REF IS REF CURSOR ;
V_REF T_REF ;
V_DATA EMPLOYEES%ROWTYPE ;
V_STAT VARCHAR2(32000) := 'SELECT * FROM '||P_TABLE_NAME ;
-- V_FILE UTL_FILE.FILE_TYPE ;
BEGIN
-- V_FILE := UTL_FILE.FOPEN ( 'MY_DIR' , P_TABLE_NAME||'.CSV' , 'W') ;
OPEN V_REF FOR V_STAT ;
LOOP
FETCH V_REF INTO V_DATA ;
EXIT WHEN V_REF%NOTFOUND ;
-- UTL_FILE.PUT_LINE (V_FILE , V_DATA ) ;
END LOOP;
CLOSE V_REF ;
-- UTL_FILE.FCLOSE (V_FILE);
END ;
------------------------------
------ TASK
PACKAGE MY_PKG
FUNCTION GET_NAME ( P_ID NUMBER , P_E_D VARCHAR2 )
IF P_E_D = E THEN
P_ID = EMPLOYEE_ID
RETURN FULL_NAME
ELSIF P_E_D = D THEN
P_ID = DEPARTMENT_ID
RETURN DEPARTMENT_NAME
--------
GET_FORMAT_PHONE_NUMBER (P_PHONE_NUMBER VARCHAR2)
IF P_PHONE_NUMBER = LENGTH <> 11 THEN
ERROR 'Invalid Phone Number'
ELSE
P_PHONE_NUMBER := '01144858147'
return 011-448-52147
----------
GET_FULL_ADDRESS ( P_ID NUMBER , P_E_D VARCHAR2 )
IF P_E_D = E THEN
P_ID = EMPLOYEE_ID
RETURN ADDRESS (CITY || STEET_ADDRESS)
ELSIF P_E_D = D THEN
P_ID = DEPARTMENT_ID
RETURN ADDRESS (CITY || STEET_ADDRESS)