Datatype summary for Oracle 7, 8 & 9
Datatype | Description | Max Size: Oracle 7 |
Max Size: Oracle 8 |
Max Size: Oracle 9 |
Max Size: PL/SQL |
PL/SQL Subtypes/ Synonyms |
VARCHAR2(size) | Variable length character string having maximum length size
bytes. You must specify size |
2000 bytes minimum is 1 |
4000 bytes minimum is 1 |
4000 bytes minimum is 1 |
32767 bytes minimum is 1 |
STRING VARCHAR |
NVARCHAR2(size) | Variable length national character set string having maximum
length size bytes. You must specify size |
N/A | 4000 bytes minimum is 1 |
4000 bytes minimum is 1 |
32767 bytes minimum is 1 |
STRING VARCHAR |
VARCHAR | Now deprecated - VARCHAR is a synonym for VARCHAR2 but this usage may change in future versions. | - | - | - | ||
CHAR(size) | Fixed length character data of length size bytes. This should be used for fixed length data. Such as codes A100, B102... | 255 bytes Default and minimum size is 1 byte. |
2000 bytes Default and minimum size is 1 byte. |
2000 bytes Default and minimum size is 1 byte. |
32767 bytes Default and minimum size is 1 byte. |
CHARACTER |
NCHAR(size) | Fixed length national character set data of length size bytes. This should be used for fixed length data. Such as codes A100, B102... | N/A | 2000 bytes Default and minimum size is 1 byte. |
2000 bytes Default and minimum size is 1 byte. |
32767 bytes Default and minimum size is 1 byte. |
|
NUMBER(p,s) | Number having precision p and scale s. | The precision p can range from 1 to 38. The scale s can range from -84 to 127. |
The precision p can range from 1 to 38. The scale s can range from -84 to 127. |
The precision p can range from 1 to 38. The scale s can range from -84 to 127. |
Magnitude 1E-130 .. 10E125 maximum precision of 126 binary digits, which is roughly equivalent to 38 decimal digits The scale s can range from -84 to 127. For floating point don't specify p,s REAL has a maximum precision of 63 binary digits, which is roughly equivalent to 18 decimal digits |
fixed-point numbers: DEC DECIMAL NUMERIC integers: INTEGER INT SMALLINT floating-point: DOUBLE PRECISION FLOAT REAL |
PLS_INTEGER | signed integers PLS_INTEGER values require less storage and provide better performance than NUMBER values. So use PLS_INTEGER where you can! |
PL/SQL only | PL/SQL only | PL/SQL only | magnitude range is -2147483647 .. 2147483647 | |
BINARY_INTEGER | signed integers (older slower version of PLS_INTEGER) | magnitude range is -2147483647 .. 2147483647 | ||||
LONG | Character data of variable length (A bigger version the VARCHAR2 datatype) | 2 Gigabytes | 2 Gigabytes | 2 Gigabytes - but now deprecated | 32760 bytes Note this is smalller than the maximum width of a LONG column |
|
DATE | Valid date range | from January 1, 4712 BC to December 31, 4712 AD. | from January 1, 4712 BC to December 31, 9999 AD. | from January 1, 4712 BC to December 31, 9999 AD. | from January 1, 4712 BC to December 31, 9999 AD. (in Oracle7 = 4712 AD) |
|
TIMESTAMP (fractional_seconds_precision) | the number of digits in the fractional part of the SECOND datetime field. | - | - | Accepted values of fractional_seconds_precision are 0 to 9. (default = 6) | ||
TIMESTAMP (fractional_seconds_precision) WITH {LOCAL} TIMEZONE | As above with time zone displacement value | - | - | Accepted values of fractional_seconds_precision are 0 to 9. (default = 6) | ||
INTERVAL YEAR (year_precision) TO MONTH | Time in years and months, where year_precision is the number of digits in the YEAR datetime field. | - | - | Accepted values are 0 to 9. (default = 2) | ||
INTERVAL DAY (day_precision) TO SECOND (fractional_seconds_precision) | Time in days, hours, minutes, and seconds. day_precision is the maximum number of digits in 'DAY' fractional_seconds_precision is the max number of fractional digits in the SECOND field. |
- | - | day_precision may be 0 to 9. (default = 2)
fractional_seconds_precision may be 0 to 9. (default = 6) |
||
RAW(size) | Raw binary data of length size bytes. You must specify size for a RAW value. |
Maximum size is 255 bytes. | Maximum size is 2000 bytes | Maximum size is 2000 bytes | 32767 bytes | |
LONG RAW | Raw binary data of variable length. (not intrepreted by PL/SQL) | 2 Gigabytes. | 2 Gigabytes. | 2 Gigabytes - but now deprecated | 32760 bytes Note this is smalller than the maximum width of a LONG RAW column |
|
ROWID | Hexadecimal string representing the unique address of a row
in its table. (primarily for values returned by the ROWID pseudocolumn.) |
Hexadecimal string representing the unique address of a row
in its table. (primarily for values returned by the ROWID pseudocolumn.) |
||||
UROWID | Hex string representing the logical address of a row of an index-organized table | N/A | The maximum size and default is 4000 bytes | The maximum size and default is 4000 bytes | universal rowid - Hex string representing the logical address of a row of an index-organized table, either physical, logical, or foreign (non-Oracle) | See CHARTOROWID and the package: DBMS_ROWID |
MLSLABEL | Binary format of an operating system label.This datatype is used with Trusted Oracle7. | |||||
CLOB | Character Large Object | 4Gigabytes | 4Gigabytes | 4Gigabytes | 4Gigabytes | |
NCLOB | National Character Large Object | 4Gigabytes | 4Gigabytes | 4Gigabytes | ||
BLOB | Binary Large Object | 4Gigabytes | 4Gigabytes | 4Gigabytes | ||
BFILE | pointer to binary file on disk | 4Gigabytes | 4Gigabytes | The size of a BFILE is system dependent but cannot exceed four gigabytes (2**32 - 1 bytes). |
Notes (pro's & cons)
INTEGER
This ANSI datatype will be accepted by Oracle - it is actually a synonym for
NUMBER(38)
VARCHAR2:
Storing character data as Varchar2 will save space:
Store 'SMITH' not 'SMITH '
CHAR:
Over time, when varchar2 columns are updated they will sometimes create chained
rows - because CHAR columns are fixed width they are not affected by this -
so less DBA effort is required to maintain performance.
NUMBER
When retrieving data for a NUMBER column, consider (if you can) using the PL/SQL
datatype: PLS_INTEGER for better performance.
LONG
You should start using BLOB instead of LONG
Comparison with other RDBMS's
int10 | int6 | int1 | char(n) | blob | |
Oracle 8 | NUMBER(10) | NUMBER(6) | NUMBER(1) | VARCHAR2(n) | BLOB |
Sybase system 10 | NUMERIC(10) | NUMERIC(6) | NUMERIC(1) | VARCHAR(n) | IMAGE |
MS Access 97 | Long Int or Double | Single | Byte | TEXT(n) | LONGBINARY |
TERADATA | INTEGER | DECIMAL(6) | DECIMAL(1) | VARCHAR(n) | VARBYTE(20480) |
DB2 | INTEGER | DECIMAL(6) | DECIMAL(1) | VARCHAR(n) | VARCHAR(255) |
RDB | INTEGER | DECIMAL(6) | DECIMAL(1) | VARCHAR(n) | LONG VARCHAR |
INFORMIX | INTEGER | DECIMAL(6) | DECIMAL(1) | VARCHAR(n) | BYTE |
SYBASE | NUMERIC(10) | NUMERIC(6) | NUMERIC(1) | VARCHAR(n) | IMAGE |
MS SQL Server 6.0 | NUMERIC(10) | NUMERIC(6) | NUMERIC(1) | VARCHAR(n) | IMAGE |
RedBrick | integer | int | int | char(n) | char(1024) |
INGRES | INTEGER | INTEGER | INTEGER | VARCHAR(n) | VARCHAR(1500) |