Powered By Blogger

Saturday 31 March 2012

PROCEDURE


 

                                                                     PROCEDURE  

 

 CREATE OR REPLACE PROCEDURE  CheckDept (PDeptno  IN Dept.Deptno%TYPE,Status OUT BOOLEAN)

IS

E_Deptno EXCEPTION;

BEGIN

IF DeptIsPresent(PDeptno) THEN

   Status  := TRUE;

            DBMS_OUTPUT.PUT_LINE('Department Checked Successfully’);

ELSE

Status  := FALSE;

RAISE  E_Deptno;

END IF;

EXCEPTION

WHEN E_Deptno THEN

DBMS_OUTPUT.PUT_LINE(' Department no.' ||  PDeptno || ' is not Regitered ..Please Contact with Addmin and Try angain ..Thank you for using this software');

END;

/

CREATE OR REPLACE PROCEDURE 

CheckJob(PJob   IN Emp.Job%TYPE,Status OUT BOOLEAN)

IS

E_Job EXCEPTION;

BEGIN

IF IsJobAccept(PJob) THEN

   Status  := TRUE;

DBMS_OUTPUT.PUT_LINE('Designation  Checked Successfully’);

ELSE

Status  := FALSE;

RAISE  E_Job;

END IF;

EXCEPTION

WHEN E_Job THEN

DBMS_OUTPUT.PUT_LINE(' Designation ' ||  PJob || ' is not Allowed ..Please Contact with Addmin and Try angain ..Thank you for using this software');

END;

/

CREATE OR REPLACE PROCEDURE

CheckMgr(PMgr   IN Emp.Mgr%TYPE,Status OUT BOOLEAN)

IS

E_Mgr EXCEPTION;

BEGIN

IF IsMgrAccept(PMgr) THEN

   Status  := TRUE;

            DBMS_OUTPUT.PUT_LINE('Manager IDs Checked Successfully’);

ELSE

Status  := FALSE;

RAISE E_Mgr;

END IF;

EXCEPTION

WHEN E_Mgr THEN

DBMS_OUTPUT.PUT_LINE( PMgr || ' is an Invalid manager ID... Try gain with a valid managerial ID ID..Thank you for using this software');

END;

/

CREATE OR REPLACE PROCEDURE 

CheckSal (PSal   IN Emp.Sal%TYPE,Status OUT BOOLEAN)

IS

E_Sal EXCEPTION;

BEGIN

IF PSal BETWEEN 800 AND 5000 THEN

   Status  := TRUE;

DBMS_OUTPUT.PUT_LINE('Salary Checked Successfully’);

ELSE

Status  := FALSE;

RAISE E_Sal;

END IF;

EXCEPTION

WHEN E_Sal THEN

DBMS_OUTPUT.PUT_LINE(        'Salary ' || PSal  || ' for an Employee  is not in the company policy ..Try Again' );

END;

/

CREATE OR REPLACE PROCEDURE 

CheckComm(PComm   IN Emp.Comm%TYPE,PJob IN Emp.Job%TYPE,Status OUT BOOLEAN)

IS

E_Comm EXCEPTION;

BEGIN

IF (PComm IS NOT NULL AND PJob = 'SALESMAN') OR  (PComm IS  NULL AND PJob <> 'SALESMAN' ) THEN

   Status  := TRUE;

            DBMS_OUTPUT.PUT_LINE('Commission  Checked Successfully’);

ELSE  

Status  := FALSE;

RAISE E_Comm;

END IF;

EXCEPTION

WHEN E_Comm THEN

DBMS_OUTPUT.PUT_LINE(        'Commision is not allowd for '|| PJob || '''s  Please Try Again ');

END;

CREATE OR REPLACE PROCEDURE 

CheckEmpID(PEmpno IN Emp.Empno%TYPE ,Status OUT BOOLEAN )

IS

E_Empno EXCEPTION;

BEGIN

IF IsEmpIDAccept(PEmpno) THEN

            Status := FALSE;

            RAISE E_Empno;   

ELSE

            Status := TRUE;     

            DBMS_OUTPUT.PUT_LINE('Employee ID Checked Successfully’);

END IF;

EXCEPTION

WHEN E_Empno THEN

            DBMS_OUTPUT.PUT_LINE(        ' Employe Id ' || PEmpno || ' is already registered for another Employee . Please Try again with a new employe ID');

END;

/

CREATE OR REPLACE PROCEDURE 

CheckHireDate(PHireDate   IN Emp.Hiredate%TYPE,Status OUT BOOLEAN)

IS

E_HireDate EXCEPTION;

BEGIN

IF TO_DATE(PHiredate,'DD-MON-YY') = TO_DATE(SYSDATE,'DD-MON-YY')  THEN

            Status  := TRUE;

            DBMS_OUTPUT.PUT_LINE('Hiredate  Checked Successfully’);

ELSE

            Status  := FALSE;

            RAISE E_HireDate;

END IF;

EXCEPTION

WHEN E_HireDate THEN

            DBMS_OUTPUT.PUT_LINE(        PHireDate || ' is not match with server Date' );

END;

/


/*****************************************************************************

  ** ******         Employee information in 3 tire architecture           ********             

 *****************************************************************************

 1.Cursor Defination in Package(BackEnd)                      

  2.Open The Cursor for Every client and give the content area to an out Mode variable of the client  (MiddleLayer )

3.Stored the data into a plsql table returned from the procedure  out mode variable and use the table for client level operation(Front end)

*****************************************************************************/

*****************************************************************************

**********            1.Cursor Defination in Package(BackEnd)                   *********

*****************************************************************************/

CREATE OR REPLACE PACKAGE EmployeeResult

AS

TYPE EmpRefCursor IS REF CURSOR;

PROCEDURE EmpCsrProc(IN_EName IN VARCHAR2,OUT_EmpCursor  OUT EmpRefCursor);

END EmployeeResult;

/******************************************************************************

  2.Open The Cursor for Every client and give the content area to an out Mode variable of the client  (MiddleLayer )

******************************************************************************/


CREATE OR REPLACE PACKAGE BODY EmployeeResult

AS

PROCEDURE EmpCsrProc(IN_EName IN VARCHAR2,OUT_EmpCursor  OUT EmpRefCursor)

IS

BEGIN

OPEN OUT_EmpCursor FOR

SELECT E.Empno,E.Ename,E.Job,D.Deptno,D.Dname,E.Sal,S.Grade

FROM Emp E,Dept D,SalGrade S

WHERE Ename LIKE('%'|| IN_EName || '%' )

              AND E.Deptno=D.Deptno

              AND E.Sal BETWEEN S.LoSal AND S.HiSal;

END EmpCsrProc;

END EmployeeResult;

/

/******************************************************************************

3.Stored the data into a plsql table returned from the procedure  out mode variable and use the table for client level operation(Front end)

******************************************************************************/








DECLARE
TYPE EmpType IS RECORD
(  
Empno                      Emp.Empno%TYPE,
Ename                       Emp.Ename%TYPE,
Job                              Emp.Job%TYPE,
Deptno                      Dept.Deptno%TYPE,
Dname                      Dept.Dname%TYPE,
Sal                              Emp.Sal%TYPE,
Grade                        SalGrade.Grade%TYPE
);
Employee EmpType;
TYPE Emp_Table_Type
IS TABLE OF Employee%TYPE
INDEX BY BINARY_INTEGER;
V_EmpTable Emp_Table_Type;
V_MatchPattern         VARCHAR2(10) := UPPER('&pattern');
V_EmpCursor  EmployeeResult.EmpRefCursor;
E_NotFound EXCEPTION;
BEGIN
EmployeeResult.EmpCsrProc(V_MatchPattern ,V_EmpCursor);
FETCH V_EmpCursor BULK COLLECT INTO V_EmpTable;
IF V_EmpTable.COUNT <> 0 THEN
DBMS_OUTPUT.PUT_LINE('Employee details matched with employee name of the pattern ''' || V_MatchPattern || ''' are shown below');
DBMS_OUTPUT.PUT_LINE(LPAD('*',80,'*'));
DBMS_OUTPUT.PUT_LINE('Empno     Ename       Job        Deptno    DName         Sal     Grade');
DBMS_OUTPUT.PUT_LINE(LPAD('-',80,'-'));
FOR MyIndex IN V_EmpTable.FIRST .. V_EmpTable.LAST
LOOP
            DBMS_OUTPUT.PUT_LINE(LPAD(V_EmpTable(MyIndex).Empno,6) ||'     '||RPAD(V_EmpTable(MyIndex).Ename ,10)|| '  '   || RPAD(V_EmpTable(MyIndex).Job,10)
                                                         || '   ' || LPAD(V_EmpTable(MyIndex).Deptno,4)  ||'    ' || RPAD(V_EmpTable(MyIndex).DName,10)   || '  ' || LPAD(V_EmpTable(MyIndex).Sal,6)
                                                         || '  '  || LPAD(V_EmpTable(MyIndex).Grade,4));
END LOOP;
DBMS_OUTPUT.PUT_LINE(LPAD('-',80,'-'));
DBMS_OUTPUT.PUT_LINE(V_EmpTable.LAST|| ' Employe name  is matched with the matching character');
ELSE
            RAISE E_NotFound;
END IF;
EXCEPTION
WHEN E_NotFound  THEN
DBMS_OUTPUT.PUT_LINE('Sorry .No  match found  for  the pattern ''' || V_MatchPattern || '''  with employee name in Database'); 
END;
/

FUNCTION


                                               FUNCTION

 

CREATE OR REPLACE FUNCTION DeptIsPrsent(PDeptno  Dept.Deptno%TYPE)

RETURN BOOLEAN

IS

V_Deptno    Dept.Deptno%TYPE;

BEGIN

SELECT DISTINCT Job  INTO V_Deptno

FROM Emp

WHERE Job= PDeptno;

IF SQL%FOUND THEN

   RETURN TRUE;

END IF;

EXCEPTION

WHEN NO_DATA_FOUND THEN

   RETURN FALSE;

END;

CREATE OR REPLACE FUNCTION IsJobAccept(PJob  Emp.Job%TYPE)

RETURN BOOLEAN

IS

V_Job     Emp.Job%TYPE;

BEGIN

SELECT DISTINCT Job  INTO V_Job

FROM Emp

WHERE Job= PJob;

IF SQL%FOUND THEN

   RETURN TRUE;

END IF;

EXCEPTION

WHEN NO_DATA_FOUND THEN

   RETURN FALSE;

END;

CREATE OR REPLACE FUNCTION IsMgrAccept(PMgr  Emp.Mgr%TYPE)

RETURN BOOLEAN

IS

V_Mgr     Emp.Mgr%TYPE;

BEGIN

SELECT Empno  INTO V_Mgr

FROM Emp

WHERE Empno=PMgr;

IF SQL%FOUND THEN

   RETURN TRUE;

END IF;

EXCEPTION

WHEN NO_DATA_FOUND THEN

   RETURN FALSE;

END;

CREATE OR REPLACE FUNCTION IsEmpIDAccept(PEmpno Emp.Empno%TYPE )

 RETURN BOOLEAN

 IS

 V_Empno     Emp.Empno%TYPE;

 BEGIN

 SELECT Empno INTO V_Empno

 FROM Emp

 WHERE Empno= PEmpno;

 IF SQL%FOUND THEN

    RETURN TRUE;

 END IF;

 EXCEPTION

 WHEN NO_DATA_FOUND THEN

    RETURN FALSE;

 END;

/************************************************

*******       Function using Ref Cursor   ***********

************************************************/

CREATE OR REPLACE PACKAGE

 EmpResultSet

 AS

 TYPE EmpRefCursor IS REF CURSOR;

 END EmpResultSet;

 /

CREATE OR REPLACE FUNCTION EmplResultSet

RETURN EmpResultSet.EmpRefCursor

IS

V_EmpResultSet EmpResultSet.EmpRefCursor;

Emp_SQLSTMNT    VARCHAR2(200);

BEGIN

Emp_SQLSTMNT := 'SELECT * FROM Emp';

OPEN V_EmpResultSet FOR Emp_SQLSTMNT;

RETURN  V_EmpResultSet;

END EmplResultSet;

CREATE OR REPLACE FUNCTION

EmplResultSet(QSqlStmnt VARCHAR2)

RETURN EmpResultSet.EmpRefCursor

IS

V_EmpResultSet EmpResultSet.EmpRefCursor;

Emp_SQLSTMNT    VARCHAR2(200);

BEGIN

Emp_SQLSTMNT := QSqlStmnt;

OPEN V_EmpResultSet FOR Emp_SQLSTMNT;

RETURN  V_EmpResultSet;

END EmplResultSet;

/


EXCEPTION


BEGIN

DECLARE

V_Empno       Emp.Empno%TYPE := &gEmpno;

V_Ename       Emp.Ename%TYPE := UPPER('&gEName');

V_Job              Emp.Job%TYPE := UPPER('&gJob');

V_Deptno      Emp.Deptno%TYPE := &gDeptno;

V_Hiredate   Emp.HireDate%TYPE := UPPER('&gHireDate');

V_Mgr             Emp.Mgr%TYPE := &gMgrNo;

V_Sal               Emp.Sal%TYPE := &gSal;

V_Comm          Emp.Comm%TYPE := &gCommission;

E_HireDate   EXCEPTION;

E_Sal               EXCEPTION;

E_Comm         EXCEPTION;

E_Unk               EXCEPTION;

PRAGMA EXCEPTION_INIT(E_Unk,-1);

V_Emp                        Emp%ROWTYPE;

E_ErrorNo          NUMBER;

E_ErrorMsg        VARCHAR2(255);   

BEGIN

SELECT Deptno  INTO V_Emp.Deptno

FROM Dept

WHERE Deptno=V_Deptno;

IF SQL%FOUND THEN

            --DBMS_OUTPUT.PUT_LINE(' Department Checked Successful');  

            BEGIN

            SELECT DISTINCT Job  INTO V_Emp.Job

            FROM Emp

            WHERE Job= V_Job;

            IF SQL%FOUND THEN

                        --DBMS_OUTPUT.PUT_LINE('Designation Checked Successful');               

                        BEGIN

                        SELECT Empno  INTO V_Emp.Empno

                        FROM Emp

                        WHERE Empno=V_Mgr;

                        IF SQL%FOUND THEN

                                    --DBMS_OUTPUT.PUT_LINE('Manager ID Checked Successful');

                                    IF TO_DATE(V_Hiredate,'DD-MON-YY') = TO_DATE(SYSDATE,'DD-MON-YY')  THEN

                                                --DBMS_OUTPUT.PUT_LINE('HireDate Checked Successful');

                                                IF V_Sal BETWEEN 800 AND 5000 THEN

                                                            --DBMS_OUTPUT.PUT_LINE('Salary Checked Successful');

                                                            IF (V_Comm IS NOT NULL AND V_Job = 'SALESMAN') OR  (V_Comm IS  NULL AND V_Job <> 'SALESMAN' ) THEN

                                                                        --DBMS_OUTPUT.PUT_LINE('Commission  Checked Successful');

                                                                        INSERT INTO Emp

                                                                        VALUES (V_Empno,V_Ename,V_Job,V_Mgr,V_Hiredate,V_Sal,V_Comm,V_Deptno);

                                                                        DBMS_OUTPUT.PUT_LINE('EMpno  EName  Job    MgrID  HireDate  Salary  Comm  Deptno' );

                                                                        DBMS_OUTPUT.PUT_LINE(Lpad('-',60,'-'));

                                                                        DBMS_OUTPUT.PUT_LINE( V_Empno  || ' '  || V_Ename || ' ' || V_Job || '  ' || V_Mgr  || '  ' || V_Hiredate  ||  '  ' || V_Sal|| '   ' || NVL(TO_CHAR(V_Comm),'NULL')  || '   ' ||V_Deptno );

                                                                        DBMS_OUTPUT.PUT_LINE('Inserted into Employee Table Successfully');

                                                            ELSE

                                                                        RAISE E_Comm;

                                                            END IF;

                                                ELSE

                                                            RAISE E_sal;

                                                END IF;

                                    ELSE

                                                RAISE E_HireDate;

                                    END IF;

                        END IF;

                        EXCEPTION

                        WHEN NO_DATA_FOUND THEN

                        DBMS_OUTPUT.PUT_LINE( V_Mgr || ' is an Invalid manager ID... Try gain with a valid managerial ID..Thank you for using this software');

                        WHEN E_HireDate THEN

                        DBMS_OUTPUT.PUT_LINE(           V_HireDate || ' is not today''s  Date' );

                        WHEN E_Sal THEN

                        DBMS_OUTPUT.PUT_LINE(           'Salary ' || V_Sal  || ' for an Employee  is not in the company policy .Try Again' );

                        WHEN E_Unk THEN

                        DBMS_OUTPUT.PUT_LINE(           ' Employe Id ' || V_Empno || ' is already registered for another Employee . Please Try again with a new employe ID');

                        WHEN E_Comm THEN

                        DBMS_OUTPUT.PUT_LINE(           'Commision is not allowd for '|| V_Job || '''s  Please Try Again ');

                        WHEN OTHERS THEN

                        E_ErrorNo := SQLCODE;

                        E_ErrorMsg   := SQLERRM;

                        DBMS_OUTPUT.PUT_LINE('Error Code is  :' || E_ErrorNo);

                        DBMS_OUTPUT.PUT_LINE('Error Message is  is  :' || E_ErrorMsg);

                        END;

            END IF;

            EXCEPTION

            WHEN NO_DATA_FOUND THEN

            DBMS_OUTPUT.PUT_LINE(' Designation ' ||  V_Job || ' is not Allowed ..Please Contact with Addmin and Try angain ..Thank you for using this software');

            WHEN OTHERS THEN

            E_ErrorNo := SQLCODE;

            E_ErrorMsg   := SQLERRM;

            DBMS_OUTPUT.PUT_LINE('Error Code is  :' || E_ErrorNo);

            DBMS_OUTPUT.PUT_LINE('Error Message is  is  :' || E_ErrorMsg);

            END;  

END IF;

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE(' Department no.' ||  V_Deptno || ' is not Regitered ..Please Contact with Addmin and Try angain ..Thank you for using this software');

WHEN OTHERS THEN

E_ErrorNo := SQLCODE;

E_ErrorMsg   := SQLERRM;

DBMS_OUTPUT.PUT_LINE('Error Code is  :' || E_ErrorNo);

DBMS_OUTPUT.PUT_LINE('Error Message is  is  :' || E_ErrorMsg);

END;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('Error Code is  :' || SQLCODE);

DBMS_OUTPUT.PUT_LINE('Error Message is  is  :' || SQLERRM);

END;