oracle里的int類型

oracle里的int類型

在 ANSI SQL 標準 中,INTEGER 和 SMALLINT 是定義好的精確數值類型,但它們的 “長度”或“大小”并不是通過 (N) 括號來指定的(如 INT(4)),這一點與 MySQL 等數據庫的非標準擴展完全不同。

  1. SMALLINT
    語義:短整型整數
    實際實現:通常是 16 位有符號整數,2個字節
    取值范圍:-32,768 ≤ SMALLINT ≤ 32,767
  2. INTEGER 或 INT
    語義:標準整數
    實際實現:通常是 32 位有符號整數,4個字節
    取值范圍:-2,147,483,648 ≤ INTEGER ≤ 2,147,483,647

oracle沒有內置int類型,但是兼容int類型,在oracle里int和smallint認為是number(38),元信息是這樣的,但數據受約束不一樣,number(38)受38位有效數字限制,而int只受number類型的最大限制限制,即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. Both precision and scale are in decimal digits. A NUMBER value requires from 1 to 22 bytes.
所以在oracle中的int類型約束等同于number類型,但元信息為number(38),其實際存儲數據的限制會遠大于sql標準中的int和smallint

Data Types

ANSI SQL Data TypeOracle Data Type
?CHARACTER(n)?
CHAR(n)?
?CHAR(n)?
?CHARACTER VARYING(n)?
CHAR VARYING(n)?
?VARCHAR2(n)?
?NATIONAL CHARACTER(n)?
NATIONAL CHAR(n)?
NCHAR(n)?
?NCHAR(n)?
?NATIONAL CHARACTER VARYING(n)?
NATIONAL CHAR VARYING(n)?
NCHAR VARYING(n)?
?NVARCHAR2(n)?
?NUMERIC[(p,s)]?
DECIMAL[(p,s)] (Note 1)
?NUMBER(p,s)?
?INTEGER?
INT?
SMALLINT?
?NUMBER(38)?
?FLOAT (Note 2)
DOUBLE PRECISION (Note 3)
REAL (Note 4)
?FLOAT(126)?
FLOAT(126)?
FLOAT(63)?

?

以下測試版本:oracle 19.18.0.0.0
SQL> create table t1(c1 int,c2 smallint);Table created.SQL> desc t1Name                                                              Null?    Type----------------------------------------------------------------- -------- --------------------------------------------C1                                                                         NUMBER(38)C2                                                                         NUMBER(38) --但是建表時,不支持int(4)這種限制類型長度,也不支持int4這種寫法
SQL> create table t2(id int(4));
create table t2(id int(4))*
ERROR at line 1:
ORA-00907: missing right parenthesisSQL> create table t2(id int4);
create table t2(id int4)*
ERROR at line 1:
ORA-00902: invalid datatype--int類型與number(38)長度的不同
SQL> create table t1(c1 number(38));Table created.
SQL> desc t1Name                                                              Null?    Type----------------------------------------------------------------- -------- --------------------------------------------C1                                                                         NUMBER(38)SQL> insert into t1 values (99999999999999999999999999999999999999);  --38個91 row created.SQL> insert into t1 values (999999999999999999999999999999999999999);  --39個9
insert into t1 values (999999999999999999999999999999999999999)*
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this columnSQL> select c1,to_char(c1),length(c1) from t1;C1 TO_CHAR(C1)                                                                      LENGTH(C1)
---------- -------------------------------------------------------------------------------- ----------
1.0000E+38 99999999999999999999999999999999999999                                                   38SQL> create table t3(c1 int);Table created.
SQL> desc t3Name                                                              Null?    Type----------------------------------------------------------------- -------- --------------------------------------------C1                                                                         NUMBER(38)SQL> insert into t3 values (99999999999999999999999999999999999999);  --38個91 row created.SQL> insert into t3 values (999999999999999999999999999999999999999);  --39個91 row created.SQL> insert into t3 values (99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);  --125個91 row created.
SQL> insert into t3 values (999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);   --126個9
insert into t3 values (999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999)*
ERROR at line 1:
ORA-01426: numeric overflowSQL>  select c1,to_char(c1),length(c1) from t3;C1 TO_CHAR(C1)                                                                      LENGTH(C1)
---------- -------------------------------------------------------------------------------- ----------
1.0000E+38 99999999999999999999999999999999999999                                                   38
1.0000E+39 999999999999999999999999999999999999999                                                  39
1.000E+125 1.000000000000000000000000000000000E+125                                                 40--沒有長度的number類型
SQL> create table t2(c1 number);Table created.SQL> desc t2Name                                                              Null?    Type----------------------------------------------------------------- -------- --------------------------------------------C1                                                                         NUMBERSQL> insert into t2 values (99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);1 row created.SQL> insert into t2 values (999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);
insert into t2 values (999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999)*
ERROR at line 1:
ORA-01426: numeric overflow

?

但是oracle在plsql對int類型的用法與在sql中有所區別,在plsql中可以使用int或者int(1) 寫法,且要做精度檢查,其中int等于number(38),int(1)等于number(1)

SQL> -- 開啟輸出
SET SERVEROUTPUT ON;SQL>--int(1)
SQL> DECLAREv1  INT(1);
BEGINv1 := 1;DBMS_OUTPUT.PUT_LINE('v1=' || v1);
END;
/  2    3    4    5    6    7
v1=1PL/SQL procedure successfully completed.SQL> DECLAREv1  INT(1);
BEGINv1 := 11;DBMS_OUTPUT.PUT_LINE('v1=' || v1);
END;
/  2    3    4    5    6    7
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at line 4----int
SQL> DECLAREv1  INT;
BEGINv1 := 99999999999999999999999999999999999999;  --38個9DBMS_OUTPUT.PUT_LINE('v1=' || v1);
END;
/  2    3    4    5    6    7
v1=99999999999999999999999999999999999999PL/SQL procedure successfully completed.SQL> DECLAREv1  INT;
BEGINv1 := 999999999999999999999999999999999999999;  --39個9DBMS_OUTPUT.PUT_LINE('v1=' || v1);
END;
/2    3    4    5    6    7  DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at line 4

?

所以,在oracle里,在sql里int類型不做精度檢查,存儲限制上等同于number,元信息上為number(38),在plsql里,要做精度檢查,int完全等同于number(38),int(1)等同于number(1)
因此在oracle開發規范中,還是盡量使用number類型,避免使用int類型,不過如果是其他支持標準 int類型的數據庫中,如果數據符合int類型特點,還是建議用int類型而非numeric類型,因為int類型是定長存儲,一般性能會更好

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96334.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端學習之后端java小白(二)-sql約束/建表

一、約束SQL約束(Constraints)是用于限制表中數據的規則,確保數據的完整性和準確性。以下是主要的SQL約束類型: 主要約束類型: 1. NOT NULL 約束: 確保列不能包含空值 CREATE TABLE users (id INT NOT NULL,name VARC…

OpenCV:圖像金字塔

文章目錄一、什么是圖像金字塔?二、圖像金字塔的核心操作:采樣與逆采樣1. 向下采樣(pyrDown):從高分辨率到低分辨率步驟1:高斯濾波步驟2:刪除偶數行與偶數列OpenCV實戰代碼效果特點2. 向上采樣&…

LVS與Keepalived詳解(一)負載均衡集群介紹

文章目錄前言一、什么是LVS?二、四層(L4)負載均衡的最佳解決方案是什么?2.1解決方案分類與對比(負載均衡的三種方式介紹)2.1.1 硬件負載均衡 (Hardware Load Balancer)2.1.2 軟件負載均衡 (Software Load B…

消息隊列-kafka完結

基本概念和操作 基本概念 簡單概念:::color4 Broker:如果將kafka比喻成數據倉庫網絡,那么Broker就是網絡中的倉庫節點,比如快遞站,在該節點內可以獨立運行,并且多個Broker可以連接起來,構建kafka集群Topic&…

Chromium 138 編譯指南 Windows篇:環境變量配置與構建優化(三)

引言配置,往往決定成敗。在軟件開發的世界里,環境變量就像是一位無聲的指揮家,默默地協調著各個組件的協同工作。對于Chromium 138這樣一個擁有數千萬行代碼的超大型項目而言,正確的環境變量配置更是編譯成功的關鍵所在。也許您曾…

LabVIEW加載 STL 模型至 3D 場景 源碼見附件

LabVIEW 中 STL 模型的導入與 3D 場景顯示,基于示例代碼邏輯,結合格式兼容性、功能實現步驟及多樣化顯示方式,適用于三維可視化溫控、機械零件模擬等場景。 1示例代碼 NI 社區案例 “Add an STL file to 3D scene using LabVIEW” 提供了經…

硅基計劃3.0 Map類Set類

文章目錄一、二叉搜索樹(排序樹)1. 概念初識2. 模擬實現1. 創建搜索樹節點2. 查找指定元素是否存在3. 插入4. 刪除二、Map類1. put——設置單詞以及其頻次2. get——獲取單詞頻次3. getOrDefault——獲取單詞頻次或返回默認值4. remove——刪除單詞頻次信…

LeetCode 刷題【73. 矩陣置零】

73. 矩陣置零 自己做 解&#xff1a;標記消除 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {vector<bool> x(matrix.size(), false); //要置0的行vector<bool> y(matrix[0].size(), false); //…

Unity學習----【進階】TextMeshPro學習(一)--基礎知識點

來源于唐老獅的視頻教學&#xff0c;僅作記錄和感悟記錄&#xff0c;方便日后復習或者查找 一.導入TextMeshPro 對于新創建的工程&#xff0c;可以直接在這里導入TMP必要的資源&#xff08;上面&#xff09;&#xff0c;以及TMP的實例和擴展&#xff08;下面&#xff09; 導入之…

BigDecimal(用于處理超出double范圍的浮點數)

BigDecimal 是 Java 中 java.math 包提供的高精度十進制浮點數類&#xff0c;專為解決基本類型&#xff08;float/double&#xff09;的精度缺陷而設計&#xff0c;廣泛用于金融、科學計算等對精度要求極高的場景。以下從核心特性、使用方法、常見問題對比、注意事項等方面詳細…

Nginx 優化

文章目錄1、隱藏版本號2、修改用戶與組3、緩存時間4、日志切割5、連接超時6、更改進程數7、配置網頁8、防盜鏈1、隱藏版本號 隱藏nginx的版本號&#xff0c;為了防止惡意用戶利用已知漏洞進行攻擊 ## 查看版本號 curl -I http://192.168.10.23方法一&#xff1a;修改配置文件…

基于多模態與主動學習的車船飛機圖像識別系統研究與應用技術方案

技術方案 一、技術背景與研究現狀 圖像識別是計算機視覺的核心任務之一&#xff0c;隨著深度學習的發展&#xff0c;基于 卷積神經網絡&#xff08;CNN&#xff09; 與 視覺Transformer&#xff08;ViT&#xff09; 的圖像分類方法已成為主流。 根據《圖像分類技術選型——截止…

Word2Vec詞嵌入技術和動態詞嵌入技術

Word2Vec&#xff08;Word to Vector&#xff09;是 2013 年由 Google 團隊提出的無監督詞嵌入模型&#xff0c;是一種靜態詞嵌入技術&#xff0c;核心目標是將自然語言中的離散詞匯映射為低維、稠密的實數向量&#xff08;即 “詞向量”&#xff09;&#xff0c;讓向量空間的距…

Netty從0到1系列之Netty邏輯架構【上】

文章目錄一、Netty邏輯架構【上】1.1 網絡通信層1.1.1 BootStrap & ServerBootStrap1. ?核心方法鏈與配置2. ? 架構與流程3. ? 底層實現與原理分析4. ? 實踐經驗與總結1.1.2 Channel1.2 事件調度層1.2.1 事件調度層概述1.2.2 EventLoop【事件循環】1.2.3 EventLoopGrou…

Spring Cloud 高頻面試題詳解(含代碼示例與深度解析)

文章目錄Spring Cloud 高頻面試題詳解&#xff08;含代碼示例與深度解析&#xff09;1. 什么是 Spring Cloud&#xff1f;它與 Spring Boot 有什么關系&#xff1f;2. 服務發現&#xff1a;Eureka 和 Nacos 的區別與選型&#xff1f;Eureka 示例與原理Eureka vs Nacos 對比表3.…

Ascend310B重構驅動run包

在Atlas 200I AI加速模塊(Ascend310B)移植過程中如需要將自己編譯的Image、dt.img及內核模塊打包到啟動鏡像包中需要對"Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run"(下面統稱驅動run包)進行重構。下面將介紹如何重構run包。 重構驅動run包需…

Leecode hot100 - 287. 尋找重復數

題目描述 287. 尋找重復數 - 力扣&#xff08;LeetCode&#xff09; 定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 [1, n] 范圍內&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;返…

機器人控制器開發(驅動層——奧比大白相機適配)

文章總覽 編譯OrbbecSDK_ROS2的代碼 執行命令 colcon buildros2 launch orbbec_camera dabai.launch.py問題1&#xff1a; 運行時報錯&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not…

`vcpkg` 微軟開源的 C/C++ 包管理工具的使用和安裝使用spdlog

vcpkg 是 微軟開源的 C/C 包管理工具&#xff0c;類似于 Python 的 pip、Node.js 的 npm、Rust 的 cargo。 它的主要作用是&#xff1a;幫助你快速下載、編譯、安裝和管理 C/C 第三方庫&#xff0c;并自動配置到你的項目&#xff08;比如 Visual Studio、CMake、MSBuild&#x…

Mysql 幻讀詳解

我們來詳細地聊一聊 MySQL InnoDB 中的“幻讀”&#xff08;Phantom Read&#xff09;問題。這是一個在數據庫事務隔離中非常核心且有時令人困惑的概念。 我會從定義、例子、原因以及解決方案幾個方面來徹底講清楚。 1. 什么是幻讀&#xff1f; 官方定義&#xff1a;幻讀指的…