Create and execute function that returns number, text, or date value.
Create and execute a Function in PL/SQL
Create and execute a function that returns a number, text, or date value.
As mentioned in the previous lesson, you can use a function just about anywhere that you use a column or expression in an SQL command, as long as the function returns a standard Oracle datatype
a number,
text, or
date value.
This lesson demonstrates how to create a function using SQL*Plus, and includes an exercise to create a function yourself.
This function is going to be used to format a zip code. It will add a dash between the first five characters and the last four characters when the value is a 9-digit zip code. If it is any other length, the format of the value remains unchanged.
The following series of images below describe how to create a function from start to finish.
Creating a PL/SQL Function
PL/SQL Function Declaration
A function is a subprogram that can take parameters and return a single value. A function has two parts:
the specification and
the body.
The specification (spec for short) begins with the keyword FUNCTION and ends with the RETURN clause, which specifies the datatype of the return value.
Parameter declarations are optional and functions that take no parameters are written without parentheses. The function body begins with the keyword IS (or AS) and ends with the keyword END followed by an optional function name.
PL/SQL Function Body:
The function body has three parts:
an optional declarative part,
an executable part, and
an optional exception-handling part.
The declarative part contains declarations of
types,
cursors,
constants,
variables,
exceptions, and
subprograms.
These items are local and cease to exist when you exit the function. The executable part contains statements that assign values, control execution, and manipulate data. The exception-handling part contains handlers that deal with exceptions raised during execution. Note that the function declaration in a PL/SQL block or package is not the same as creating a function in SQL.
Oracle PL/SQL function that returns both a number and text:
Here is an example of an Oracle PL/SQL function that returns both a number and text. This function will take an input parameter, perform a calculation, and return a number along with a descriptive text.
CREATE OR REPLACE FUNCTION calculate_area(radius IN NUMBER)
RETURN VARCHAR2 IS
pi CONSTANT NUMBER := 3.14159;
area NUMBER;
result_text VARCHAR2(100);
BEGIN
area := pi * radius * radius;
result_text := 'The area of the circle with radius ' || TO_CHAR(radius) || ' is ' || TO_CHAR(area);
RETURN result_text;
END calculate_area;
/
In this function, calculate_area, we declare a constant pi and two variables area and result_text. The function takes one input parameter, radius, which is of type NUMBER. The function is declared to return a VARCHAR2 type, which is a string of variable length.
The BEGIN and END keywords enclose the body of the function. In the body, we calculate the area of a circle using the formula pi * radius * radius and assign it to the area variable. We then construct a string result_text that includes both the input radius and the calculated area. This string is returned by the function.
To call this function, you would use a SQL statement like this:
SELECT calculate_area(5) FROM dual;
This would return: "The area of the circle with radius 5 is 78.53975".
Now that you have seen how a function is created and executed within an SQL query, it is time to try to create one yourself.
Syntax for creating Function in PL/SQL
The syntax for the create function command is more complicated than the syntax for the create procedure command. At a high level, the syntax is
create [or replace] function [schema]
function
[( argument [ in | out | in out ] [nocopy] datatype
[, argument [ in | out | in out ] [nocopy] datatype]...
)]
return datatype
[{ invoker_rights_clause | deterministic | parallel_enable_clause }
[ invoker_rights_clause | deterministic | parallel_enable_clause ]...
]
{ { aggregate | pipelined } using [schema .] implementation_type
| [pipelined] { is | as } { pl/sql_function_body | call_spec }};
Both the header and the body of the function are created by this command. The return keyword specifies the datatype of the function's return value. This can be any valid PL/SQL datatype. Every function must have a return clause, since the function must, by definition, return a value to the calling environment.
Function Returning Value - Exercise
Click the Exercise link below to create your own function. Function Returning Value - Exercise
The next lesson examines functions that return a Boolean value.