You are on page 1of 4

Procedures:

(i).It is a named PL/SQL sub programs. It is compiled and stored in database for
repeated execution.
(ii).It can accept an argument/parameter and can return a value. Procedure performs
an action.
(iii).It is a schema object. It improves the performance of an application by
reducing network traffic.
(iv).If procedure is created outside the package then it is called as stored or
standalone subprograms and if is created in package then it is called packaged
subprogram.

We can create procedure inside anonymous block.


We can create procedure inside package.
We can create procedure inside procedure.

SYNTAX:
create or replace procedure procedure_name
as
declarative statements
begin
executable statements
exception
error handling statements
end;

IN Parameter:
It is used to passing Input value to the sub program.
It is read only access.

OUT Parameter:
It is used to get output value from the procedure.
It has read / write access.

IN OUT Parameter:
It can accept both input values and return output values.
It passes an initial value to a procedure and return an updated value to the
calling code.

CREATE OR REPLACE PROCEDURE p1(roll_num IN NUMBER,NAME OUT VARCHAR2,dept OUT


VARCHAR2, marks OUT NUMBER)

SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE P1


AS
ID NUMBER:=100;
NAME VARCHAR2(30);
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE EMPLOYEE_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;

BEGIN
P1;
END;

EXEC P1;
DESCRIBE P1;
DESC P1;
DROP PROCEDURE P1;

CREATE OR REPLACE PROCEDURE P1(ID IN NUMBER,NAME OUT VARCHAR2)


AS
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE EMPLOYEE_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;

DECLARE
X VARCHAR2(30);
BEGIN
P1(102,X);
END;

SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE P1


AS
ID NUMBER :=108;
NAME EMPLOYEES.FIRST_NAME%TYPE;
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE EMPLOYEE_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;

BEGIN
P1;
END;

CREATE OR REPLACE PROCEDURE P1(ID IN NUMBER)


AS
NAME EMPLOYEES.FIRST_NAME%TYPE;
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE EMPLOYEE_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;

BEGIN
P1(114);
END;

EXEC P1(120);

DROP PROCEDURE P1;

CREATE OR REPLACE PROCEDURE P1(ID IN NUMBER, NAME OUT VARCHAR2)


AS
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE EMPLOYEE_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;
DECLARE
X VARCHAR2(30);
BEGIN
P1(150,X);
END;

CREATE OR REPLACE PROCEDURE P1(ID IN NUMBER, NAME OUT VARCHAR2)


AS
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE EMPLOYEE_ID=ID;
END;

DECLARE
X NUMBER := 160;
Y VARCHAR2(30);
BEGIN
P1(X,Y);
DBMS_OUTPUT.PUT_LINE(Y);
END;

CREATE OR REPLACE PROCEDURE P1(ID NUMBER,NAME OUT VARCHAR2,SAL OUT NUMBER,HD OUT
DATE)
AS
BEGIN
SELECT FIRST_NAME,SALARY,HIRE_DATE INTO NAME,SAL,HD FROM EMPLOYEES WHERE
EMPLOYEE_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
DBMS_OUTPUT.PUT_LINE(SAL);
DBMS_OUTPUT.PUT_LINE(HD);
END;

DECLARE
X VARCHAR2(30);
Y NUMBER;
Z DATE;
BEGIN
P1(140,X,Y,Z);
END;

CREATE OR REPLACE PROCEDURE P1(ph IN OUT varchar2)


AS
BEGIN
ph :='91'||ph;
DBMS_OUTPUT.PUT_LINE(ph);
END;

DECLARE
X VARCHAR2(30):='85250 00006';
BEGIN
P1(X);
END;

It passes an initial value to a procedure and return an updated value to the


calling code.

CREATE OR REPLACE PROCEDURE P1(ID IN NUMBER,NAME OUT VARCHAR2)


AS
BEGIN
SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE DEPARTMENT_ID=ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;

DECLARE
A VARCHAR2(30);
BEGIN
P1(80,A);
END;

FOR LOOP:

CREATE OR REPLACE PROCEDURE P1(ID IN NUMBER)


AS
BEGIN
FOR I IN (SELECT FIRST_NAME FROM EMPLOYEES WHERE DEPARTMENT_ID=ID) LOOP
DBMS_OUTPUT.PUT_LINE(I.FIRST_NAME);
END LOOP;
END;

BEGIN
P1(80);
END;

USING CURSOR

CREATE OR REPLACE PROCEDURE P1(DEPT IN NUMBER,NAME OUT VARCHAR2)


AS
CURSOR C1 IS SELECT FIRST_NAME INTO NAME FROM EMPLOYEES WHERE DEPARTMENT_ID=DEPT;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO NAME;
EXIT WHEN C1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(NAME);
END LOOP;
CLOSE C1;
END;

DECLARE
A VARCHAR2(30);
BEGIN
P1(30,A);
END;

DATA DICTIONARIES:

select * from USER_OBJECTS where OBJECT_TYPE='PROCEDURE';


select TEXT from user_source where name='P1';

You might also like