PL/SQL recursive calls: recursion in Oracle
Oracle Database Tips by Donald Burleson
Question: Does Oracle
PL/SQL support recursive calls. I mean, can I use recursion to
have a function call itself?
Answer: Yes, PL/SQL does support recursion via function calls. Recursion is
the act of a function calling itself, and a recursive call requires PL/SQL to
create local copies of its memory structures for each call. The Oracle
?PL/SQL does allow for
recursive execution of function calls, however, so you can put it to use
inside a SQL statement where recursion is needed.?
PL/SQL User's Guide and Reference notes:
"A recursive subprogram
is one that calls itself. Each recursive call creates a new instance of any
items declared in the subprogram, including parameters, variables, cursors,
Likewise, new instances
of SQL statements are created at each level in the recursive descent."
for an example of
PL/SQL Recursive cursors
A "cursor" is not a PL/SQL
programmer who cusses, but rather, PL/SQL uses a cursor to keep a handle to each
recursive call. In PL/SQL, a
recursive cursor (a pointer to a shared SQL area)
is used to keep a pointer to each call of a recursive function in PL/SQL.
SQL statement? refers to additional "hidden" SQL that is issued for internal
Oracle functions such as re-caching paged-out data from the dictionary cache,
but we also see recursive SQL for these items, especially DDL:
Parsing a new SQL statement (validate table & column names, check security)
management functions required to service DDL (create table)
within PL/SQL (functions and stored procedures)
Referential integrity checks
examples of using recursion with PL/SQL,
see the outstanding book "Oracle
PL/SQL Tuning: Expert Secrets for High Performance Programming" by Dr. Tim
Hall, Oracle ACE of the year, 2006:
If you like Oracle tuning, see the book "Oracle
Tuning: The Definitive Reference", with 950 pages of tuning tips and
You can buy it direct from the publisher for 30%-off and get
instant access to the code depot of Oracle tuning scripts.