=============================
Expand|Select|Wrap|Line Numbers
- create or replace package my_pkg as
- procedure my_proc(arg1 in varchar2);
- function my_fun(arg1 in number) return varchar2;
- end my_pkg;
PACKAGE BODY
===============
Expand|Select|Wrap|Line Numbers
- create or replace package body my_pkg as
- function my_private_fun(arg1 in number) return varchar2
- is
- return_val varchar2(20);
- begin
- select col1 into return_val from tab2 where col2=arg1;
- return return_val;
- exception
- when NO_DATA_FOUND THEN
- return 'Sorry no data found.....!';
- end my_private_fun;
- function my_fun(arg1 in number)return varchar2
- is
- begin
- return my_private_fun(arg1);
- end my_fun;
- procedure my_proc(arg1 in varchar2)
- is
- begin
- update tab1 set col1=col1+1 where col2=arg1;
- end my_proc;
- end my_pkg;
and in PL/SQL the procedures and function must be defined before it is being used. Other wise user will get compilation error.
package
==========
Expand|Select|Wrap|Line Numbers
- CREATE OR REPLACE PACKAGE PACK
- IS
- P_ENAME EMP.ENAME%TYPE;
- P_SAL EMP.SAL%TYPE;
- P_JOB EMP.JOB%TYPE;
- P_REC EMP%ROWTYPE;
- CURSOR C IS SELECT * FROM EMP;
- C_REC C%ROWTYPE;
- PROCEDURE DEPT_INS
- (
- D_DEPTNO DEPT.DEPTNO%TYPE,
- D_DNAME DEPT.DNAME%TYPE,
- D_LOC DEPT.LOC%TYPE
- );
- FUNCTION ANSAL(ENO EMP.EMPNO%TYPE)
- RETURN NUMBER;
- END;
-------------------------
Expand|Select|Wrap|Line Numbers
- BEGIN
- SELECT ENAME,SAL,JOB INTO PACK.P_ENAME,PACK.P_SAL,PACK.P_JOB FROM EMP WHERE EMPNO=&NO;
- DBMS_OUTPUT.PUT_LINE(PACK.P_ENAME||' '||PACK.P_SAL||' '||PACK.P_JOB);
- END;
---------------------------------
Expand|Select|Wrap|Line Numbers
- BEGIN
- OPEN PACK.C;
- LOOP
- FETCH PACK.C INTO PACK.C_REC;
- EXIT WHEN PACK.C%NOTFOUND;
- DBMS_OUTPUT.PUT_LINE(PACK.C_REC.ENAME);
- END LOOP;
- CLOSE PACK.C;
- END;
PACKAGE BODY
----------------------------------
Expand|Select|Wrap|Line Numbers
- CREATE OR REPLACE PACKAGE BODY PACK
- IS
- PROCEDURE DEPT_INS
- (
- D_DEPTNO DEPT.DEPTNO%TYPE,
- D_DNAME DEPT.DNAME%TYPE,
- D_LOC DEPT.LOC%TYPE
- )
- IS
- BEGIN
- INSERT INTO DEPT VALUES(D_DEPTNO,D_DNAME,D_LOC);
- DBMS_OUTPUT.PUT_LINE('1 RECORD INSERTED....');
- EXCEPTION
- WHEN DUP_VAL_ON_INDEX THEN
- DBMS_OUTPUT.PUT_LINE('DUPLICATE RECORD FOUND.....!');
- WHEN OTHERS THEN
- DBMS_OUTPUT.PUT_LINE('SOME OTHER ERROR......!');
- END DEPT_INS;
- FUNCTION ANSAL
- (
- ENO EMP.EMPNO%TYPE
- )
- RETURN NUMBER
- AS
- SALARY NUMBER(8);
- BEGIN
- SELECT (SAL+NVL(COMM,0))*12 INTO SALARY FROM EMP WHERE EMPNO=ENO;
- RETURN SALARY;
- END ANSAL;
- END PACK;