Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Function Procedure Packages
 

Define constant in a package

SQL> SQL> CREATE TABLE employee   2  (employee_id         NUMBER(7),   3   last_name           VARCHAR2(25),   4   first_name          VARCHAR2(25),   5   userid              VARCHAR2(8),   6   start_date          DATE,   7   comments            VARCHAR2(255),   8   manager_id          NUMBER(7),   9   title               VARCHAR2(25),  10   department_id       NUMBER(7),  11   salary              NUMBER(11, 2),  12   commission_pct      NUMBER(4, 2)  13  ); Table created. SQL> SQL> CREATE OR REPLACE PACKAGE empinfo   2  IS   3     bysal CONSTANT INTEGER := 1;   4     bysaldesc CONSTANT INTEGER := 2;   5     bydept CONSTANT INTEGER := 3;   6     byname CONSTANT INTEGER := 4;   7     TYPE two_pieces_t IS RECORD (str VARCHAR2(100), num NUMBER);   8     TYPE emp_cvt IS REF CURSOR RETURN two_pieces_t;   9     FUNCTION open (query_number IN INTEGER) RETURN emp_cvt;  10     PROCEDURE show (query_number IN INTEGER);  11  END;  12  / Package created. SQL> CREATE OR REPLACE PACKAGE BODY empinfo   2  IS   3     FUNCTION open (query_number IN INTEGER) RETURN emp_cvt   4     IS   5        retval emp_cvt;   6     BEGIN   7        IF query_number = bysal   8        THEN   9           OPEN retval FOR  10              SELECT last_name, salary FROM employee ORDER BY salary;  11        ELSIF query_number = bysaldesc  12        THEN  13           OPEN retval FOR  14              SELECT last_name, salary FROM employee ORDER BY salary DESC;  15        ELSIF query_number = bydept  16        THEN  17           OPEN retval FOR  18              SELECT last_name, department_id FROM employee ORDER BY department_id;  19        ELSIF query_number = byname  20        THEN  21           OPEN retval FOR  22              SELECT first_name || ' ' || last_name, salary  23                FROM employee ORDER BY last_name;  24        END IF;  25        RETURN retval;  26     END;  27  28     PROCEDURE show (query_number IN INTEGER)  29     IS  30        cv emp_cvt;  31        rec cv%ROWTYPE;  32     BEGIN  33        cv := open (query_number);  34        LOOP  35           FETCH cv INTO rec;  36           EXIT WHEN cv%NOTFOUND;  37           IF cv%ROWCOUNT = 1  38           THEN  39              DBMS_OUTPUT.PUT_LINE (RPAD ('-', 60, '-'));  40              DBMS_OUTPUT.PUT_LINE ('Contents of Query ' || query_number);  41              DBMS_OUTPUT.PUT_LINE (RPAD ('-', 60, '-'));  42           END IF;  43           DBMS_OUTPUT.PUT_LINE (RPAD (rec.str, 30) || rec.num);  44        END LOOP;  45        CLOSE cv;  46     END;  47  48  END;  49  / Package body created. SQL> drop table employee; Table dropped.