版本Oracle 19,我使用DataGrip创建表,字段类型设置为smallint和integer,但是我发现最终生成的表的字段类型是number(*)
,而且无论我使用SQL新建表还是用对话框新建表,都是这个效果。但是如果不支持integer和smallint,为什么不报错?如果支持,那numbere(*)
的取值范围和前两者完全是不一样的。到底真相是什么?
没有。
Oracle 数值只有 number
类型,别的数值类型都是为了方便你从其他数据库迁移过来而提供的别名,实质上还是 number
。
就像 SQLite 里字符串其实只有 text
类型,但也兼容你写的 varchar
一样。
在Oracle数据库中,确实没有直接对应于SQL标准中的INTEGER
和SMALLINT
这样的精确数值数据类型。Oracle使用NUMBER
数据类型来存储数值,它可以存储非常大或非常小的数值,以及包含小数点的数值。
当你尝试在Oracle中创建一个表,并为其字段指定SMALLINT
或INTEGER
时(如通过某些IDE或工具,如DataGrip),Oracle实际上并不直接识别这些类型。然而,很多数据库工具和IDE在内部会将这些类型映射到它们认为最接近的Oracle类型。在这种情况下,SMALLINT
和INTEGER
通常会被映射到NUMBER
类型,因为NUMBER
是Oracle中最通用的数值类型。
至于为什么不会报错,这是因为Oracle的NUMBER
类型非常灵活,能够存储多种精度的数值。当你指定一个字段为NUMBER
而没有指定精度和标度时(如NUMBER(*)
),Oracle会根据需要为数值分配存储空间,这通常意味着它可以存储非常大或非常小的数值。虽然这与你可能期望的SMALLINT
或INTEGER
的固定大小和限制有所不同,但Oracle的NUMBER
类型确实提供了一种方式来存储这些数值类型的数据。
如果你想在Oracle中模拟SMALLINT
或INTEGER
的行为,你可以通过为NUMBER
类型指定精度和标度来实现。例如,一个SMALLINT
可以大致等同于NUMBER(5)
(尽管SMALLINT
通常被视为有符号的16位整数,范围从-32,768到32,767,但NUMBER(5)
的精度较低,可能不足以精确表示所有可能的SMALLINT
值,特别是当考虑到符号位时),而一个INTEGER
可以大致等同于NUMBER(10)
或NUMBER(11)
(取决于是否包括符号位)。然而,这种映射并不完美,因为NUMBER
类型始终包含小数点的概念,即使标度为0。
总的来说,如果你在Oracle中需要精确控制数值的范围和大小,你应该使用NUMBER
类型并明确指定精度和标度。如果你来自使用SMALLINT
或INTEGER
的SQL环境,可能需要调整你的设计以适应Oracle的这种差异。
官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/19... 图片: number(m,n)里,m是包括整数和小数部分的总位数吧,如果总位数限制为2,那小数位数限制为7有什么意义呢? 如果红框的值是0.9999912,那stored as的值是多少?
我需要将GPS坐标保存在一个没有安装spatial extension的Oracle数据库中。有一个软件pl/sql模拟Oracle Spatial的主要功能(显然没有使用它的数据类型),以同样的方式对Oracle 11的JSON功能进行“包装”。github:https://github.com/pljson/pljson上有这个项目
我有一个包含函数的自定义数据类型。在下一步中,我想使用中的。 注意:这是一个练习,所以我必须使用自定义列表 调用应该是这样的:returns 我得到的错误: 没有实例(Num(整数- 问题:我看不出我的错误。为什么我没有对函数应用足够的参数?我传递一个函数的Flist,该函数获取一个Int并返回一个Int。另外,传递另一个Int,应该就是它。这里还缺什么?
目前,我们有一个数据库运行在Oracle 10g(10.2.0.2)上,需要全天候运行,但由于数据中心不支持它,服务器OS和Oracle数据库10g,我们不得不按照上级的协议转移到Oracle 12c。我知道我不能使用从10.2.0.2到12.2.0.1的直接expdp/impdp。并且资源有限,这意味着服务器资源有限,无法访问oracle支持以下载oracle 10.2.0.5修补程序集或任何可
本文向大家介绍oracle清空所有表数据,包括了oracle清空所有表数据的使用技巧和注意事项,需要的朋友参考一下 方法: 1. 删除所有外键约束 2. drop表 3. 添加外键约束 代码使用powerdesign生成
问题内容: 我的输入就是这样。 O / p:应该像 我想要一个可以在数据库级别上触发的查询。我尝试了各种方法,但无法做到这一点… 问题答案: 11g及更高版本: 使用listagg: 10g及以下: 一种方法是使用功能: 要使用该功能: 注意:在某些较早版本的Oracle上有一个(不受支持的)功能,该功能可能会对您有所帮助-有关详细信息,请参见此处。 在MySQL中: