Chapter 3 : PL/SQL Fundamentals
A.U: 2020/2021                         1 M(AD)2
Plan
1.       Introduction
2.       Structures of a PL/SQL block
3.       Variables
4.       Nested blocks
     2
3.1 Introduction
   SQL is a non-procedural language.
   The development of an application around a RDB requires the use of:
       Variables
       programming control structures (loops and alternatives).
   Need a procedural language to link several SQL queries with variables and in
    the usual control structures = 4GL (4th Generation language).
   Hence PL/SQL: procedural and structured programming language for
    developing applications around relational databases.
    3
3.1 Introduction
   PL/SQL: Procedural Language for SQL.
   PL/SQL is a language that integrates SQL and allows programming in a
    procedural way. It is specific to Oracle. For SQL Server there is for example
    an equivalent: TRANSAC SQL.
    4
3.2 Structures of PL/SQL block
   PL/SQL programs are structured in blocks corresponding to logical units of
    the program (procedures, functions).
   A block is made up of three parts: the declarative part, the execution part, and
    the error handling part.
    5
3.2 Structures of PL/SQL block
   Example:
    6
3.2 Structures of PL/SQL block
   Header:
       The header allows you to specify the type of the block (procedure or function).
   Declaration part:
       Contains the description of the structures and variables used in the block.
   Optional section.
       Starts with the keyword DECLARE.
    7
3.2 Structures of PL/SQL block
   Execution part:
       Contains the program instructions and possibly, at the end, the error handling section.
       Mandatory.
       Introduced by the keyword BEGIN.
       Ends with the keyword END.
   Error handling part:
       Optional.
       Introduced by the keyword EXCEPTION.
    8
3.3 Variables
   Les The variables can be of any SQL type, or of the BOOLEAN type (with two
    possible values: TRUE and FALSE).
       SQL types: CHAR, NUMBER, DATE,VARCHAR2.
       PL/SQL types: BOOLEAN, SMALLINT, BINARY_INTEGER, DECIMAL, FLOAT,
        INTEGER, REAL, ROWID.
   The variable declaration includes the name of the variable, its type, and
    possibly an initialization value.
    9
3.3 Variables
   There are two types of variables that work under PL/SQL :
        PL/SQL variables
            Scalar variable: containing a single value
            Composite variable: containing several values such as RECORD, TABLE, NESTED TABLE,VARRAY
            Reference variable: variable that points to a data type
            LOB: variable locator of large objects such as images and videos
        Non-PL / SQL variables
            Substitution variables
            Host variables
    10
3.3 Variables
   Declaration et initialization
    variable_name [CONSTANT] datatype [NOT NULL] [:=|DEFAULT expr];
        datatype : le the data type of the variable, which is either scalar, compound, reference,
         or LOB.
        CONSTANT : constrain the variable to be a constant
        NOT NULL : this keyword forces the variable to contain a value.
        expr : initial value of a variable, can be a literal value, another variable, or an
         expression involving operators and functions.
    11
3.3 Variables
   The declaration of several variables on the same line is prohibited.
   Assignment
        variable := expression;
        DEFAULT : constrain the variable to be constante
        SELECT expression INTO variable FROM...
   Cannot assign the value NULL to a variable declared NOT NULL (the error
    VALUE_ERROR is returned).
   The NOT NULL constraint must be followed by an initialization.
    12
3.3 Variables
   Scalar variables
        The % TYPE keyword declares a variable with the same type of another variable or a
         column of an existing table or view.
                PL/SQL                           Comments
                DECLARE                          v_job takes the type of the column
                   v_job    emp.job%TYPE;        job of the table emp.
                v_prime NUMBER(5,2) :=           v_prime is initialized to 500,45.
                500.50;                          v_prime_min takes the type of the
                v_prime_min v_prime%TYPE :=      variable v_prime
                v_prime*2;
    13
3.3 Variables
   Composed variables – RECORD
        The %ROWTYPE declares a RECORD variable having the same structure as the
         table/view row.
                           PL/SQL                            Comments
               DECLARE                         Emp_record takes the structure of a row
                  emp_record   emp%ROWTYPE;    from the table emp.
                  v_sal NUMBER:=800;
               BEGIN                           Access to the row attributes
               emp_record.empno:=2564;
               emp_record.sal:=v_sal+100;
               …
        Note that with the %ROWTYPE, attributes do not inherit the NOT NULL constraint.
    14
3.3 Variables
   Composed variables – RECORD
        To define a personalized record, we have to define the RECORD type.
        To use it, we have to declare a variable with the type nomRecord.
    15
3.3 Variables
                A type RECORD having
                four attributes. Usine is
                initialized.
                Declaring two variables
                with the type RECORD
                Initialize record attributes
                RECORD assignment
 16
3.3 Variables
   Composed variables – TABLE
        The type TABLE is used to declare dynamic tables (without a fixed size)
        A variable with the type TABLE has two columns, a primairy key having the type BINARY_INTEGER
         and a column having the scalar or RECORD type.
                             Primary Key                                Column
                 …                                      …
                 1                                      Mohamed Toumi
                 2                                      Sami Tlili
                 3                                      Meriam Bouzid
                 …                                      …
    17
3.3 Variables
   Composed variables – TABLE
        The type TABLE is defined using the following syntax
        The variable declaration is made according to the syntax
    18
3.3 Variables
 19
3.3 Variables
   Composed variables – TABLE
        There are procedures and functions that allow you to manipulate TABLE variables:
    20
3.4 Nested Blocks
 21