CO2: To enhance the Employability skills to make student well versed with
core subjects of his domain.
UNIT-3
CHAPTER – 3.1
Procedures and Functions are the subprograms which can be created and saved in the
database as database objects. They can be called or referred inside the other blocks also.
Terminologies in PL/SQL Subprograms
Before we learn about PL/SQL subprograms, we will discuss the various terminologies that
are the part of these subprograms. Below are the terminologies that we are going to discuss.
Parameter:
The parameter is variable or placeholder of any valid PL/SQL datatype through which the
PL/SQL subprogram exchange the values with the main code. This parameter allows to give
input to the subprograms and to extract from these subprograms.
● These parameters should be defined along with the subprograms at the time of
creation.
● These parameters are included n the calling statement of these subprograms to interact
the values with the subprograms.
● The datatype of the parameter in the subprogram and the calling statement should be
same.
● The size of the datatype should not mention at the time of parameter declaration, as
the size is dynamic for this type.
Based on their purpose parameters are classified as
1. IN Parameter
2. OUT Parameter
3. IN OUT Parameter
IN Parameter:
● This parameter is used for giving input to the subprograms.
● It is a read-only variable inside the subprograms. Their values cannot be changed
inside the subprogram.
● In the calling statement, these parameters can be a variable or a literal value or an
expression, for example, it could be the arithmetic expression like '5*8' or 'a/b' where
'a' and 'b' are variables.
● By default, the parameters are of IN type.
OUT Parameter:
● This parameter is used for getting output from the subprograms.
● It is a read-write variable inside the subprograms. Their values can be changed inside
the subprograms.
● In the calling statement, these parameters should always be a variable to hold the
value from the current subprograms.
IN OUT Parameter:
● This parameter is used for both giving input and for getting output from the
subprograms.
● It is a read-write variable inside the subprograms. Their values can be changed inside
the subprograms.
● In the calling statement, these parameters should always be a variable to hold the
value from the subprograms.
These parameter type should be mentioned at the time of creating the subprograms.
RETURN
RETURN is the keyword that instructs the compiler to switch the control from the
subprogram to the calling statement. In subprogram RETURN simply means that the control
needs to exit from the subprogram. Once the controller finds RETURN keyword in the
subprogram, the code after this will be skipped.
Normally, parent or main block will call the subprograms, and then the control will shift from
those parent block to the called subprograms. RETURN in the subprogram will return the
control back to their parent block. In the case of functions RETURN statement also returns
the value. The datatype of this value is always mentioned at the time of function declaration.
The datatype can be of any valid PL/SQL data type.
What is Procedure in PL/SQL?
A Procedure in PL/SQL is a subprogram unit that consists of a group of PL/SQL statements
that can be called by name. Each procedure in PL/SQL has its own unique name by which it
can be referred to and called. This subprogram unit in the Oracle database is stored as a
database object.
Note: Subprogram is nothing but a procedure, and it needs to be created manually as per the
requirement. Once created they will be stored as database objects.
Below are the characteristics of Procedure subprogram unit in PL/SQL:
● Procedures are standalone blocks of a program that can be stored in the database.
● Call to these PLSQL procedures can be made by referring to their name, to execute
the PL/SQL statements.
● It is mainly used to execute a process in PL/SQL.
● It can have nested blocks, or it can be defined and nested inside the other blocks or
packages.
● It contains declaration part (optional), execution part, exception handling part
(optional).
● The values can be passed into Oracle procedure or fetched from the procedure
through parameters.
● These parameters should be included in the calling statement.
● A Procedure in SQL can have a RETURN statement to return the control to the
calling block, but it cannot return any values through the RETURN statement.
● Procedures cannot be called directly from SELECT statements. They can be called
from another block or through EXEC keyword.
Syntax:
CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameterl IN/OUT <datatype>
..
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
● CREATE PROCEDURE instructs the compiler to create new procedure in Oracle.
Keyword 'OR REPLACE' instructs the compile to replace the existing procedure (if
any) with the current one.
● Procedure name should be unique.
● Keyword 'IS' will be used, when the stored procedure in Oracle is nested into some
other blocks. If the procedure is standalone then 'AS' will be used. Other than this
coding standard, both have the same meaning.
Example1: Creating Procedure and calling it using EXEC
In this example, we are going to create an Oracle procedure that takes the name as input and
prints the welcome message as output. We are going to use EXEC command to call
procedure.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2)
IS
BEGIN
dbms_output.put_line (‘Welcome '|| p_name);
END;
EXEC welcome_msg (‘Guru99’);
Code Explanation:
● Code line 1: Creating the procedure with name 'welcome_msg' and with one
parameter 'p_name' of 'IN' type.
● Code line 4: Printing the welcome message by concatenating the input name.
● Procedure is compiled successfully.
● Code line 7: Calling the procedure using EXEC command with the parameter
'Guru99'. Procedure is executed, and the message is printed out as "Welcome
Guru99".
What is Function?
Functions is a standalone PL/SQL subprogram. Like PL/SQL procedure, functions have a
unique name by which it can be referred. These are stored as PL/SQL database objects.
Below are some of the characteristics of functions.
● Functions are a standalone block that is mainly used for calculation purpose.
● Function use RETURN keyword to return the value, and the datatype of this is
defined at the time of creation.
● A Function should either return a value or raise the exception, i.e. return is mandatory
in functions.
● Function with no DML statements can be directly called in SELECT query whereas
the function with DML operation can only be called from other PL/SQL blocks.
● It can have nested blocks, or it can be defined and nested inside the other blocks or
packages.
● It contains declaration part (optional), execution part, exception handling part
(optional).
● The values can be passed into the function or fetched from the procedure through the
parameters.
● These parameters should be included in the calling statement.
● A PLSQL function can also return the value through OUT parameters other than
using RETURN.
● Since it will always return the value, in calling statement it always accompanies with
assignment operator to populate the variables.
Syntax
CREATE OR REPLACE FUNCTION
<procedure_name>
<parameterl IN/OUT <datatype>
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
● 3CREATE FUNCTION instructs the compiler to create a new function. Keyword 'OR
REPLACE' instructs the compiler to replace the existing function (if any) with the
current one.
● The Function name should be unique.
● RETURN datatype should be mentioned.
● Keyword 'IS' will be used, when the procedure is nested into some other blocks. If the
procedure is standalone then 'AS' will be used. Other than this coding standard, both
have the same meaning.
Example1: Creating Function and calling it using Anonymous Block
In this program, we are going to create a function that takes the name as input and returns the
welcome message as output. We are going to use anonymous block and select statement to
call the function.
CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2)
RETURN VAR.CHAR2
IS
BEGIN
RETURN (‘Welcome ‘|| p_name);
END;
DECLARE
lv_msg VARCHAR2(250);
BEGIN
lv_msg := welcome_msg_func (‘Guru99’);
dbms_output.put_line(lv_msg);
END;
SELECT welcome_msg_func(‘Guru99:) FROM DUAL;
Code Explanation:
● Code line 1: Creating the Oracle function with name 'welcome_msg_func' and with
one parameter 'p_name' of 'IN' type.
● Code line 2: declaring the return type as VARCHAR2
● Code line 5: Returning the concatenated value 'Welcome' and the parameter value.
● Code line 8: Anonymous block to call the above function.
● Code line 9: Declaring the variable with datatype same as the return datatype of the
function.
● Code line 11: Calling the function and populating the return value to the variable
'lv_msg'.
● Code line 12: Printing the variable value. The output you will get here is "Welcome
Guru99"
● Code line 14: Calling the same function through SELECT statement. The return value
is directed to the standard output directly.
Similarities between Procedure and Function
● Both can be called from other PL/SQL blocks.
● If the exception raised in the subprogram is not handled in the subprogram exception
handling section, then it will propagate to the calling block.
● Both can have as many parameters as required.
● Both are treated as database objects in PL/SQL.
Creating a Procedure
A procedure is created with the CREATE OR REPLACE PROCEDURE statement. The
simplified syntax for the CREATE OR REPLACE PROCEDURE statement is as follows −
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
Where,
● procedure-name specifies the name of the procedure.
● [OR REPLACE] option allows the modification of an existing procedure.
● The optional parameter list contains name, mode and types of the
parameters. IN represents the value that will be passed from outside and OUT
represents the parameter that will be used to return a value outside of the procedure.
● procedure-body contains the executable part.
● The AS keyword is used instead of the IS keyword for creating a standalone
procedure.
9*Example
The following example creates a simple procedure that displays the string 'Hello World!' on
the screen when executed.
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
When the above code is executed using the SQL prompt, it will produce the following result
−
Procedure created.
Executing a Standalone Procedure
A standalone procedure can be called in two ways −
● Using the EXECUTE keyword
● Calling the name of the procedure from a PL/SQL block
The above procedure named 'greetings' can be called with the EXECUTE keyword as −
EXECUTE greetings;
The above call will display −
Hello World
PL/SQL procedure successfully completed.
The procedure can also be called from another PL/SQL block −
BEGIN
greetings;
END;
/
The above call will display −
Hello World
PL/SQL procedure successfully completed.
Deleting a Standalone Procedure
A standalone procedure is deleted with the DROP PROCEDURE statement. Syntax for
deleting a procedure is −
DROP PROCEDURE procedure-name;
You can drop the greetings procedure by using the following statement −
DROP PROCEDURE greetings;
Parameter Modes in PL/SQL Subprograms
The following table lists out the parameter modes in PL/SQL subprograms −
1 IN
An IN parameter lets you pass a value to the subprogram. It is a read-only parameter. Inside
the subprogram, an IN parameter acts like a constant. It cannot be assigned a value. You can
pass a constant, literal, initialized variable, or expression as an IN parameter. You can also
initialize it to a default value; however, in that case, it is omitted from the subprogram call. It
is the default mode of parameter passing. Parameters are passed by reference.
2 OUT
An OUT parameter returns a value to the calling program. Inside the subprogram, an OUT
parameter acts like a variable. You can change its value and reference the value after
assigning it. The actual parameter must be variable and it is passed by value.
3 IN OUT
An IN OUT parameter passes an initial value to a subprogram and returns an updated value to
the caller. It can be assigned a value and the value can be read. The actual parameter
corresponding to an IN OUT formal parameter must be a variable, not a constant or an
expression. Formal parameter must be assigned a value. Actual parameter is passed by value.
IN & OUT Mode Example 1
This program finds the minimum of two values. Here, the procedure takes two numbers using
the IN mode and returns their minimum using the OUT parameters.
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
When the above code is executed at the SQL prompt, it produces the following result −
Minimum of (23, 45) : 23
PL/SQL procedure successfully completed.
IN & OUT Mode Example 2
This procedure computes the square of value of a passed value. This example shows how we
can use the same parameter to accept a value and then return another result.
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
When the above code is executed at the SQL prompt, it produces the following result −
Square of (23): 529
PL/SQL procedure successfully completed.
Methods for Passing Parameters
Actual parameters can be passed in three ways −
● Positional notation
● Named notation
● Mixed notation
Positional Notation
In positional notation, you can call the procedure as −
findMin(a, b, c, d);
In positional notation, the first actual parameter is substituted for the first formal parameter;
the second actual parameter is substituted for the second formal parameter, and so on. So, a is
substituted for x, b is substituted for y, c is substituted for z and d is substituted for m.
Named Notation
In named notation, the actual parameter is associated with the formal parameter using
the arrow symbol ( => ). The procedure call will be like the following −
findMin(x => a, y => b, z => c, m => d);
Mixed Notation
In mixed notation, you can mix both notations in procedure call; however, the positional
notation should precede the named notation.
The following call is legal −
findMin(a, b, c, m => d);
However, this is not legal:
findMin(x => a, b, c, d);
OTHER REFRENCES
● Oracle PL/SQL Stored Procedure & Functions with Examples (guru99.com)
● PL/SQL Tutorial - PL/SQL Stored Procedures. (plsql-tutorial.com)
● PL/SQL - Procedures - Tutorialspoint
SUGGESTED BOOK REFERENCES
● Ramez Elmasri and Shamkant B. Navathe,“Fundamentals of Database System”, The
Benjamin / Cummings Publishing Co.
● Korth and Silberschatz Abraham, “DatabaseSystem Concepts”, McGraw Hall.
● Pratt,”DBMS”, Cengage Learning.