Oracle hỗ trợ sẵn các kiểu dữ liệu cơ bản đủ để lưu trữ các loại thông tin khác nhau. Ngoài ra, Oracle còn có thể hỗ trợ mở rộng thêm nhiều kiểu dữ liệu khác để phù hợp với yêu cầu lưu trữ. Trong phần này chúng ta sẽ xem qua các kiểu dữ liệu cơ bản mà Oracle hỗ trợ (built-in data types

 

Character data types

Các kiểu dữ liệu ký tự bao gồm:

  • CHAR (n byte|char): kiểu chuỗi ký tự có độ dài cố định n, tối đa 2000 bytes hoặc 2000 ký tự
  • VARCHAR2 (n byte|char): kiểu chuỗi ký tự có độ dài bất kỳ đến n , tối đa 4000 bytes hoặc 4000 ký tự
  • NCHAR (n): kiểu chuỗi ký tự Unicode có độ dài cố định n ký tự, tối đa 2000 bytes
  • NVARCHAR2 (n): kiểu chuỗi ký tự Unicode có độ dài bất kỳ đến n ký tự, tối đa 4000 bytes

 

Nếu khai báo kiểu CHAR hay VARCHAR2 mà chỉ khai báo size là n, mặc định sẽ hiểu là n byte (theo semantic mặc định của database).

 

Kiểu NCHAR hay NVARCHAR2 khai báo size là n, mặc định sẽ hiểu là ký tự.

 

Kiểu dữ liệu CHAR hay VARCHAR2 bị ảnh hưởng bởi tham số NLS_CHARACTERSET, do đó nếu ta tạo database với NLS_CHARACTERSET cũng là Unicode, thì không cần quan tâm khai báo dùng kiểu dữ liệu CHAR hay NCHAR, VARCHAR2 hay NVARCHAR2.

 

 

Number data types

Các kiểu dữ liệu số bao gồm:

  • NUMBER [(p [,s])]: kiểu số với độ dài tối đa p  chữ số bao gồm cả phần thập phân (tối đa 38 chữ số), trong đó phần thập phân có chữ số (từ -84 đến 127)
  • FLOAT (p): kiểu số có dấu chấm phẩy động, độ dài tối đa chữ số nhị phân (VD float(126) sẽ hỗ trợ tối đa 38 chữ số thập phân)
  • BINARY_FLOAT: kiểu số có dấu chấm phẩy động, 4 bytes, hỗ trợ số dương vô hạn (BINARY_FLOAT_INFINITY) và giá trị “Not a number” (BINARY_FLOAT_NAN)
  • BINARY_DOUBLE: kiểu số có dấu chấm phẩy động, 8 bytes, hỗ trợ số dương vô hạn (BINARY_DOUBLE_INFINITY) và giá trị “Not a number” (BINARY_DOUBLE_NAN)

 

 

Trong thực tế ta cũng hay thấy các kiểu dữ liệu số khác được sử dụng, chẳng hạn như Smallint, Integer, Real, Decimal… Điều này là do Oracle cũng hỗ trợ các kiểu dữ liệu theo tiêu chuẩn ANSI hay IBM. Ta có thể tạo table với các kiểu dữ liệu trên, Oracle sẽ tự động convert về kiểu dữ liệu chuẩn của Oracle, thường là Number hay Float.

 

Đó là lý do ta thường nghĩ cột kiểu Integer trong Oracle chỉ lưu được số đến khoảng 2 tỷ, nhưng thực ra là có thể lưu số lớn hơn rất nhiều.

 

 

(Tùy công cụ mà cách hiển thị khác nhau. Chẳng hạn với SQL*Plus ta thấy như bên trên, còn trong Toad ta sẽ thấy Col1 và Col2 vẫn là kiểu Integer)

 

Datetime data types

Các kiểu dữ liệu ngày tháng giờ giấc bao gồm:

  • DATE: kiểu dữ liệu ngày giờ bao gồm Year – Month – Day – Hour – Minute – Second, từ 01/01/4712 BC đến 31/12/9999 AD
  • TIMESTAMP [ (fractional_seconds_precision) ] [ WITH [ LOCAL ] TIME ZONE ]: kiểu dữ liệu ngày giờ có hỗ trợ thêm milisecond, time zone. Nếu sử dụng Local time zone, dữ liệu ngày giờ khi lưu vào database sẽ được chuẩn hóa theo time zone của database, khi user query sẽ thấy ngày giờ theo time zone của session
  • INTERVAL YEAR TO MONTH: lưu khoảng thời gian theo năm và tháng
  • INTERVAL DAY TO SECOND: lưu khoảng thời gian theo ngày giờ phút giây

 

 

 

Large objects data types

Các kiểu dữ liệu Large objects có khả năng chứa những đối tượng dữ liệu lớn, chẳng hạn như các bài báo dài, phim, nhạc, hình ảnh, các tập tin…  bao gồm:

  • BLOB: kiểu dữ liệu binary large object, thường dùng chứa phim nhạc hình ảnh …, tối đa từ 8TB – 128TB tùy vào db block size
  • CLOB: kiểu dữ liệu character large object, chứa những văn bản dài, tối đa từ 8TB – 128TB tùy vào db block size
  • NCLOB: kiểu dữ liệu Unicode character large object, chứa những văn bản Unicode dài, tối đa từ 8TB – 128TB tùy vào db block size
  • BFILE: lưu con trỏ trỏ tới tập tin nằm ngoài database, kích thước tập tin tối đa 4GB

 

Long & Raw data types

Các kiểu dữ liệu Long, Raw có từ các phiên bản xa xưa. Hiện tại Oracle chỉ hỗ trợ nhằm mục đích tương thích ngược, ta không nên sử dụng nữa do có nhiều hạn chế.

  • LONG: kiểu dữ liệu lưu trữ character tới 2GB, tuy nhiên đã cũ, không nên dùng vì có nhiều hạn chế, thay bằng CLOB
  • LONG RAW: kiểu dữ liệu lưu trữ binary data tới 2GB, tuy nhiên đã cũ, nên thay bằng BLOB
  • RAW (n): kiểu dữ liệu lưu trữ binary data tới 2000 bytes, tuy nhiên đã cũ, nên thay bằng BLOB

 

ROWID data types

Đây là kiểu dữ liệu đặc biệt dành riêng cho các địa chỉ row trong Oracle database.

  • ROWID: base 64 string, kiểu dữ liệu cho địa chỉ row trả về khi ta query cột giả ROWID
  • UROWID(n): base 64 string, kiểu dữ liệu cho địa chỉ logic của row trong IOT

 

 

Trên đây là các kiểu dữ liệu sẵn có (Built-in data types) của Oracle. Ngoài ra Oracle còn hỗ trợ nhiều kiểu dữ liệu khác chuyên biệt hơn, như dữ liệu XML, dữ liệu địa lý không gian, dữ liệu đa phương tiện, hay kiểu dữ liệu do người dùng định nghĩa…