Oracle 資料型別

踏步發表於2024-04-10
Oracle資料型別 簡要說明
字元型別 char和varchar2,可表達任何字串
數字型別 number(m,n),可表達任何數字,m是數字的精度,n是小數點後的位數,如果n為0則表示是一個整數。
日期型別 date,存放日期和時間,包括年(yyyy)、月(mm)、日(dd)、小時(hh24)、分(mi)、秒(ss)
clob型別 存放單位元組字串或多位元組字串資料,如文字檔案、xml檔案
blob型別 存放非結構化的二進位制資料,如圖片、音訊、影片、office文件等
rowid型別
urowid型別
存放表中記錄在資料庫中的實體地址

字元型別

字元型別 定長/變長 是否必須指定長度 預設值 位元組 unicode字符集
char 定長字元型別(未達到指定長度時,自動在末尾用空格補全) 1 最大2000位元組 非unicode
nchar 定長字元型別(未達到指定長度時,自動在末尾用空格補全) 1 最大1000位元組,所有字元都佔兩個位元組 根據unicode
varchar2 變長字元型別(未達到指定長度時,不自動補全空格) 最大4000位元組 非unicode
nvarchar2 變長字元型別(未達到指定長度時,不自動補全空格) 最大2000位元組 根據unicode
  1. 最大xxx位元組,位元組而非字元個數,如char(1)就連一個漢字都不能存放。

  2. unicode字符集是為了解決字符集不相容的問題而產生的,所有字元都用兩個位元組表示,即英文字元也用兩個位元組表示。

建立表驗證字元型別

create table char_table(
  char_column char,
  nchar_column nchar(2),
  varchar2_column varchar2(4000),
  nvarchar2_column nvarchar2(4)
);

插入資料

insert into char_table values ('1', '太一', '亞古獸進化', '暴龍獸');

查詢資料

select * from char_table;

數字型別

oracle中的數字型別主要為三種:number,float,binary_*,其他的型別基本上都是number型別或者float型別的子型別。

數字型別 使用頻率 說明
number(p,s) 常用
float 不常用 二進位制精度,需要進行精度轉換
binary_float
binary_double
不常用 表示範圍更大可用於科學計算,精度沒有number型別高(可用於金融資料)

number(p,s)型別

22個位元組的儲存空間

字母 釋義 說明 取值範圍 預設值 其它
p DBA_TAB_COLUMNS表的DATA_PRECISION(精度) 包括小數在內的總共有效位數 [1~38] 若沒有指定,預設為38 當整數部分的長度大於p時,報錯
s DBA_TAB_COLUMNS表的DATA_SCALE(小數位) 精確到多少位小數 [-84~127] 若沒有指定,預設為0 當小數位數大於s時,並四捨五入
當s取負數時,將小數點左邊的s置為0,並四捨五入

官方文件給出的幾個例子如下:

輸入資料 定義型別 儲存結果
1,234,567.89 NUMBER 1234563.89
1,234,567.89 NUMBER(*,1) 1234563.9
1,234,567.89 NUMBER(9) 1234564
1,234,567.89 NUMBER(9,2) 1234563.89
1,234,567.89 NUMBER(9,1) 1234563.9
1,234,567.89 NUMBER(6) 報錯,超精度
1,234,567.89 NUMBER(7,-2) 1234600

number型別的子型別

number型別的子型別 簡要說明
integer 等同於number(38)
smallint 同於number(38)
decimal 可以使用decimal(p,s),若p,s未指定,等同於number(38)

float型別

字母 釋義 說明 取值範圍 預設值
float(b) 二進位制精度(binary precision b表示二進位制進度 [1,126] 126

b是一個二進位制精度(binary precision),而不是我們通常說的十進位制精度(decimal precision)

需要進行以下的轉換:binary precision=int(b*0.30103)

舉例來說:當b=2,則對應的十進位制精度為int(2*0.30103)=0,即小數點後精度為0。

eg:56.2儲存到float(2)變為60。計算過程:56.2=5.62*10^1,因為精度為0只能取到整數,5.62四捨五入後為6,最後取值為6*10^1=60

float型別的子型別

float型別的子型別 簡要說明
real 等同於float(63)

binary_float和binary_double型別

資料型別 說明 位元組長度
binary_float 32位單精度浮點數資料型別 5個位元組(4位元組+1個長度位元組)支援至少6位精度
binary_double 64位雙精度浮點數資料型別 9個位元組(8位元組+1個長度位元組)

建立表驗證數字型別

create table num_table(
  number1 number,
  number2 number(38),
  number3 number(9,2),
  int4 int,
  smallint1 smallint,
  decimal1 decimal(5,2),
  float1 float,
  float2 float(2),
  real1 real,
  binary_float1 binary_float,
  binary_double1 binary_double
);

插入資料

insert into num_table values (1.23, 123, 1234567.89, 573, 34, 673.43, 34.1264, 56.2, 23.231, 12.34f, 34.56d);

查詢資料

select * from num_table;

日期型別

未完待續...

long型別

未完待續...

blob & clob & nclob大物件資料型別

未完待續...

rowid & urowid型別

未完待續...

相關文章