PL/SQL - Data Types

In this chapter, we will discuss the Data Types in PL/SQL. The PL/SQL variables, constants and parameters must have a valid data type, which specifies a storage format, constraints, and a valid range of values. We will focus on the SCALAR and the LOB data types in this chapter. The other two data types will be covered in other chapters.
Scalar
Single values with no internal components, such as a NUMBER, DATE, or BOOLEAN.
Large Object (LOB)
Pointers to large objects that are stored separately from other data items, such as text, graphic images, video clips, and sound waveforms.
Composite
Data items that have internal components that can be accessed individually. For example, collections and records.
Reference
Pointers to other data items.
PL/SQL Scalar Data Types and Subtypes come under the following categories −
Numeric
Numeric values on which arithmetic operations are performed.
Character
Alphanumeric values that represent single characters or strings of characters.
Boolean
Logical values on which logical operations are performed.
Datetime
Dates and times.
PL/SQL provides subtypes of data types. For example, the data type NUMBER has a subtype called INTEGER. You can use the subtypes in your PL/SQL program to make the data types compatible with data types in other programs while embedding the PL/SQL code in another program, such as a Java program.
Following table lists out the PL/SQL pre-defined numeric data types and their sub-types −
PLS_INTEGER
Signed integer in range -2,147,483,648 through 2,147,483,647, represented in 32 bits
BINARY_INTEGER
Signed integer in range -2,147,483,648 through 2,147,483,647, represented in 32 bits
BINARY_FLOAT
Single-precision IEEE 754-format floating-point number
BINARY_DOUBLE
Double-precision IEEE 754-format floating-point number
NUMBER(prec, scale)
Fixed-point or floating-point number with absolute value in range 1E-130 to (but not including) 1.0E126. A NUMBER variable can also represent 0
DEC(prec, scale)
ANSI specific fixed-point type with maximum precision of 38 decimal digits
DECIMAL(prec, scale)
IBM specific fixed-point type with maximum precision of 38 decimal digits
NUMERIC(pre, secale)
Floating type with maximum precision of 38 decimal digits
DOUBLE PRECISION
ANSI specific floating-point type with maximum precision of 126 binary digits (approximately 38 decimal digits)
FLOAT
ANSI and IBM specific floating-point type with maximum precision of 126 binary digits (approximately 38 decimal digits)
INT
ANSI specific integer type with maximum precision of 38 decimal digits
INTEGER
ANSI and IBM specific integer type with maximum precision of 38 decimal digits
SMALLINT
ANSI and IBM specific integer type with maximum precision of 38 decimal digits
REAL
Floating-point type with maximum precision of 63 binary digits (approximately 18 decimal digits)
Following is a valid declaration −
DECLARE 
   num1 INTEGER; 
   num2 REAL; 
   num3 DOUBLE PRECISION; 
BEGIN 
   null; 
END; 
/ 
When the above code is compiled and executed, it produces the following result −
PL/SQL procedure successfully completed 
Following is the detail of PL/SQL pre-defined character data types and their sub-types −
CHAR
Fixed-length character string with maximum size of 32,767 bytes
VARCHAR2
Variable-length character string with maximum size of 32,767 bytes
RAW
Variable-length binary or byte string with maximum size of 32,767 bytes, not interpreted by PL/SQL
NCHAR
Fixed-length national character string with maximum size of 32,767 bytes
NVARCHAR2
Variable-length national character string with maximum size of 32,767 bytes
LONG
Variable-length character string with maximum size of 32,760 bytes
LONG RAW
Variable-length binary or byte string with maximum size of 32,760 bytes, not interpreted by PL/SQL
ROWID
Physical row identifier, the address of a row in an ordinary table
UROWID
Universal row identifier (physical, logical, or foreign row identifier)
The BOOLEAN data type stores logical values that are used in logical operations. The logical values are the Boolean values TRUE and FALSE and the value NULL.
However, SQL has no data type equivalent to BOOLEAN. Therefore, Boolean values cannot be used in − 
SQL statements
Built-in SQL functions (such as TO_CHAR)
PL/SQL functions invoked from SQL statements
The DATE datatype is used to store fixed-length datetimes, which include the time of day in seconds since midnight. Valid dates range from January 1, 4712 BC to December 31, 9999 AD.
The default date format is set by the Oracle initialization parameter NLS_DATE_FORMAT. For example, the default might be 'DD-MON-YY', which includes a two-digit number for the day of the month, an abbreviation of the month name, and the last two digits of the year. For example, 01-OCT-12.
Each DATE includes the century, year, month, day, hour, minute, and second. The following table shows the valid values for each field −
Large Object (LOB) data types refer to large data items such as text, graphic images, video clips, and sound waveforms. LOB data types allow efficient, random, piecewise access to this data. Following are the predefined PL/SQL LOB data types −
A subtype is a subset of another data type, which is called its base type. A subtype has the same valid operations as its base type, but only a subset of its valid values.
PL/SQL predefines several subtypes in package STANDARD. For example, PL/SQL predefines the subtypes CHARACTER and INTEGER as follows −
SUBTYPE CHARACTER IS CHAR; 
SUBTYPE INTEGER IS NUMBER(38,0);

You can define and use your own subtypes. The following program illustrates defining and using a user-defined subtype −
DECLARE 
   SUBTYPE name IS char(20); 
   SUBTYPE message IS varchar2(100); 
   salutation name; 
   greetings message; 
BEGIN 
   salutation := 'Reader '; 
   greetings := 'Welcome to the World of PL/SQL'; 
   dbms_output.put_line('Hello ' || salutation || greetings); 
END; 
/ 
When the above code is executed at the SQL prompt, it produces the following result −
Hello Reader Welcome to the World of PL/SQL 
 
PL/SQL procedure successfully completed. 

PL/SQL NULL values represent missing or unknown data and they are not an integer, a character, or any other specific data type. Note that NULL is not the same as an empty data string or the null character value '\0'. A null can be assigned but it cannot be equated with anything, including itself.
 Print
 Add Notes
 Bookmark this page