數據類型SMALLINT
和INT
只是ANSI/ISO標準類型,其中在Oracle中,are aliases for NUMBER(38)
和BIGINT
數據類型不存在。
如果要存儲2字節,4字節和8個字節的值,則可以使用適當的尺寸NUMBER
列和約束檢查,以確保數據是所需要的範圍內的組合:
CREATE TABLE table_name (
small NUMBER(5,0) CHECK (small BETWEEN -POWER(2,15) AND +POWER(2,15)-1),
medium NUMBER(10,0) CHECK (medium BETWEEN -POWER(2,31) AND +POWER(2,31)-1),
big NUMBER(19,0) CHECK (big BETWEEN -POWER(2,63) AND +POWER(2,63)-1)
);
INSERT INTO table_name VALUES (-POWER(2,15), -POWER(2,31), -POWER(2,63));
INSERT INTO table_name VALUES (POWER(2,15)-1, POWER(2,31)-1, POWER(2,63)-1);
然後:
SELECT * FROM table_name
輸出:
SMALL MEDIUM BIG
------ ----------- --------------------
-32768 -2147483648 -9223372036854775808
32767 2147483647 9223372036854775807
來源
2016-05-17 13:25:45
MT0
試圖在一個使用'BIGINT' 'CREATE TABLE'語句拋出一個異常'ORA-00902:無效的數據類型'。另外兩個似乎只是'NUMBER(38)'的別名。 – MT0
我不認爲oracle在內部將它們存儲爲'decimal(22,0)'。這是在將這些列映射到外部之後獲得的數據類型。實際上'decimal'在內部也是一個子類型。 'BIGINT'不是oracle sql中的一個子類型。您可能需要考慮使用NUMBER(x,y)與(x,y)的較小值,而不是使用子類型。對於內置子類型,以下是[docs](https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm)中的列表。 – ruudvan
@ MT0我不好使用松鼠檢查表中的數據,元數據。使用**創建表腳本**時,它顯示'decimal(22,0)',同時檢查表'precision'的元數據顯示爲38。我不知道爲什麼我得到這個差異(__我正在使用'ojdbc6.jar' for this_) –