Create and execute function that returns number, text, or date value.
Create, execute 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.
Creating PL/SQL Function
The following series of images below describe how to create a function from start to finish.
1)
CREATE OR REPLACE FUNCTION FORMAT_ZIP
1) Use CREATE or (optionally) CREATE REPLACE to begin the definition of the function. In this example, the function name is FORMAT_ZIP.
2)
CREATE OR REPLACE FUNCTION FORMAT_ZIP
(ZIPCODE IN VARCHAR2)
2) A function can only use incoming parameters. In this example, the parameter is name ZIPCODE and is of the VARCHAR2 datatype.
Notice that the parameter has no length. 3)
CREATE OR REPLACE FUNCTION FORMAT_ZIP
(ZIPCODE IN VARCHAR2)
RETURN VARCHAR2 AS
3) The RETURN clause is required. The clause defines the datatype of the field returned by the function. In this example, the function returns a field that is a VARCHAR2 datatype. Notice that there is no name or length identifying the returning value. The AS keyword marks the beginning of the body of the function's definition.
4) The BEGIN clause marks the beginning of the function's declaration section, if there is one.
5) The DECLARE section is optional. In this example, a single variable named FORMATTED_ZIP is declared.
6) The second BEGIN keyword marks the end of the DECLARE section and the beginning of the body of the function. If there had been no DECLARE section, this line would have been left out.
7) Here is the first portion of the logic. In this example, the length of the incoming parameter (ZIPCODE) is tested. If the length is five, the declared variable (FORMATTED_ZIP) assigned a value equal to ZIPCODE concatenated with a dash and four zeros.
8) Continuing with the logic, this next section tests ZIPCODE for a length of nine. If true, the FORMATTED_ZIP variable is assigned to a value which takes the first five characters of ZIPCODE, adds a dash, and then tacks on the last four characters of ZIPCODE.
9) The final portion of this IF statement simply assigns FORMATTED_ZIP the value of ZIPCODE without any changes in its format.
10) There must be at least one RETURN clause like this one inside the body of the function. In this example, the value stored in the FORMATTED_ZIP variable is returned.
11) The first END closes the body section. It is needed in this case because there is a DECLARE section and a second BEGIN. The second END completes the entire function syntax.
12) Type a slash on a separate line and press ENTER to execute the CREATE FUNCTION command. The line "Function created" is the response from SQL*Plus after executing the CREATE command listed here. It tells you that the function was successfully created.
13) To call the function within a query the function name follows the SELECT clause (in this case), and the one parameter is placed between parentheses. For simplicity, the example uses a literal value as the parameter. The parameter can also be a column or expression.
14) The results of the query show how the function has formatted the incoming parameter, '96753' into a ten-character string: '96753-0000'. This function can be reused because its definition is now stored in the database.
The following link contains the same slides with additional detail. Function Returning Number
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.
Create Function Syntax
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.