PL/SQL - by definition - is a procedural language. It is specifically a procedural extension to SQL. A procedural (or imperative) language
is used to specify steps to be taken to reach a desired state. Often the steps involved differ based on the values of the variables in the program.
PL/SQL includes several control structures to vary the execution flow.
Conditional statements are used to differentiate the execution path taken (or steps taken to reach the desired state) based upon the value
of one or more variables. Iterative processing (or looping)
is used to represent repeated steps. Conditional statements and loops can be nested arbitrarily to produce many different possible results of running
the same program.