PL/SQL Constants

Summary: in this tutorial, you will learn how to use the PL/SQL constants that hold values that do not change throughout the execution of the program.

Introduction to PL/SQL constants #

Unlike a variable, a constant holds a value that does not change throughout the execution of the program.

Constants make your code more readable. Consider the following line of code that calculates the list price from price.

l_list_price :=  l_price + l_price * 0.1;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

By looking at this, we don’t know what 0.1 means. It can be anything. Of course, you can use a comment to explain the meaning of 0.1:

-- price with value-added tax (VAT) 10%
l_list_price :=  l_price + l_price * 0.1;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

However, it is even better if you use a constant like this:

l_list_price := l_price + l_price * co_vat;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

In this code, co_vat is a constant that stores the VAT tax of 10%.

To declare a constant, you specify the name, CONSTANT keyword, data type, and the default value. The following illustrates the syntax of declaring a constant:

constant_name CONSTANT datatype [NOT NULL]  := expressionCode language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

In this syntax:

constant_name #

is the name of the constant that you are declaring.

datatype #

specify the type of value that the constant will hold.

NOT NULL #

optionally imposes a NOT NULL constraint on the constant. This prevents the constant from storing NULL or an empty string.

expression #

use an expression as the initial value for the constant. The type of the return value of the expression must be compatible with the data type of the constant.

PL/SQL constant examples #

The following example declares two constants co_payment_term and co_payment_status:

DECLARE
    co_payment_term   CONSTANT NUMBER   := 45; -- days 
    co_payment_status CONSTANT BOOLEAN  := FALSE; 
BEGIN
    NULL;
END;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

If you attempt to change the co_payment_term in the execution section, PL/SQL will issue an error, for example:

DECLARE
    co_payment_term   CONSTANT NUMBER   := 45; -- days 
    co_payment_status CONSTANT BOOLEAN  := FALSE; 
BEGIN
    co_payment_term := 30; -- error
END;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

Here is the error message:

PLS-00363: expression 'CO_PAYMENT_TERM' cannot be used as an assignment target
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

The following illustrates how to declare a constant whose value is derived from an expression:

DECLARE 
    co_pi     CONSTANT REAL := 3.14159;
    co_radius CONSTANT REAL := 10;
    co_area   CONSTANT REAL := (co_pi * co_radius**2);
BEGIN
    DBMS_OUTPUT.PUT_LINE(co_area);
END;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)

In this example, the co_area constant receives the value from an expression involving two other constants.

In this tutorial, you have learned about the PL/SQL constants that hold values that remain unchanged throughout the execution of the program.

Was this tutorial helpful?