转;

pls_integer类型

2011-08-22 16:49:06 heqiyu34 阅读数 13413更多

分类专栏: Oracle
 

今天在看一个触发器代码的时候碰到了一个pls_integer类型,以前没碰到过,记录一下:

PLS_INTEGER可以存储一个有符号的整形值,其精度范围和BINARY_INTEGER一样,是:-2^31~2^31。

PLS_INTEGER和NUMBER比较起来,其优点是:
1).占有较少的存储空间;
2).可以直接进行算术运算(在NUMBER上不能直接进行算术运算,如果要计算,NUMBER必须先被转换成二进制)。所以在进行算术的时候PLS_INTEGER比NUMBER和BINARY_INTEGER快一些。

PLS_INTEGER和BINARY_INTEGER区别:
PLS_INTEGER进行的运算发生溢出的时候,会触发异常。但是当BINARY_INTEGER运算发生溢出时,如果可以指派给一个NUMBER变量(没有超出NUMBER的精度范围)的话就不会触发异常。

Benefits of Using
PLS_INTEGER
Datatype in PL/SQL
If you have a whole-number counter, for example in a loop or record counter, consider using a datatype ofPLS_INTEGER instead of INTEGER or NUMBER. When declaring an integer variable,PLS_INTEGER
is the most efficient numeric datatype because its values require less
storage than INTEGER or NUMBER values, which are represented internally
as 22-byte Oracle numbers. Also,PLS_INTEGER operations
use machine arithmetic, so they are faster than BINARY_INTEGER, INTEGER, or NUMBER operations, which use library arithmetic.
--------------------------------------------------------------------------
PLS_INTEGER Datatype
You use the PLS_INTEGER datatype to store signed integers. Its magnitude
range is -2147483648 to 2147483647, represented in 32 bits. PLS_INTEGER
values require less storage than NUMBER values and NUMBER subtypes.
Also, PLS_INTEGER operations use hardware arithmetic,
so they are faster than NUMBER operations, which use library
arithmetic. For efficiency, use PLS_INTEGER for all calculations that
fall within its magnitude range. For calculations outside the range of
PLS_INTEGER, you can use the INTEGER datatype.

Note:

The BINARY_INTEGER and PLS_INTEGER datatypes are identical. See "Change to the BINARY_INTEGER Datatype".

When a calculation with two PLS_INTEGER datatypes overflows the
magnitude range of PLS_INTEGER, an overflow exception is raised even if
the result is assigned to a NUMBER datatype.

tips:1)pls_integer类型也是数字类型,但和number类型不同,number可以存储实数,而pls_integer只能存储-2147483647到+2147483647之间的整数,如果使用pls_integer类型时发生溢出,系统将会报错。
 
  
   2)binary_integer与pls_integer类似,在9.2版本以前大量使用,从9.2以后,从Oracle内部一些组件可以看的出,大有被pls_integer取代之势(pls_integer比binary_integer具有更少的存储开销和更好的访问性能,所以Oracle从9.2以后推荐你尽量能使用pls_integer就使用pls_integer)。它也是只能存储-2147483647到+2147483647之间的整数。
 
      3)在oracle
11g中,又增加了一个新的类似的数据类型simple_integer,不过simple_integer不能包含空值,它的取值范围是[-2147483648..2147483647]。在11g中,simple_integer相对pls_integer在性能上又有所提高,如果在实际的pl/sql中既不需要overflow检查也不会包含null值,Oracle建议你使用simple_integer.
 

来源:http://www.itpub.net/thread-1106923-1-1.html

注:Binary_Integer
与 Pls_Integer 都是整型类型.
Binary_Integer类型变量值计算是由Oracle来执行,不会出现溢出,但是执行速度较慢,因为它是由Oracle模拟执行。而Pls_Integer的执行是由硬件即直接由CPU来运算,因而会出现溢出,但其执行速度较前者快许多。

pls_integer类型的更多相关文章

  1. 老方块Oracle--数值类型性能考虑

    我们在设计数据库表,或者在使用SQL,写程序时都会经常用到数值类型.比如常见的number.int.float. float是浮点类型,也属于数值类型,我们最常用的是number类型. 他的格式是nu ...

  2. Oracle forall bulk collect批量数据更新

    对于数据量较大的插入操作可采用此种方法操作,注意: limit减少内存占用,如果数据量较大一次性全部加载到内存中,对PGA来说压力太大,可采用limit的方法一次加载一定数量的数据,建议值通常为100 ...

  3. Oracle数据库之FORALL与BULK COLLECT语句

    Oracle数据库之FORALL与BULK COLLECT语句 我们再来看一下PL/SQL块的执行过程:当PL/SQL运行时引擎处理一块代码时,它使用PL/SQL引擎来执行过程化的代码,而将SQL语句 ...

  4. ORACLE数据库编程

    第一章 Oracle数据库基本概念 一.介绍 Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为 核心的一组软件产品,是目前最流行的客户/服务器(Client/Server, ...

  5. PL/SQL数据类型

    在定义变量或常量时,必须要指定一个数据类型,PL/SQL是一种静态类型化的程序设计语言,静态类型化又称为强类型化,也就是说类型会在编译时而不是在运行时被检查,这样在编译时便能发现类型错误,以便增强程序 ...

  6. 提升 PLSQL 开发性能漫谈

    本文内容摘自<剑破冰山--Oracle开发艺术>一书,有删改. 1.触发器尽量考虑内部代码过程封装(解析次数) 2.避免动态 SQL 动态 SQL 和普通 SQL 在执行过程中最大的差别在 ...

  7. PL/SQL编程基础(三):数据类型划分

    数据类型划分 在Oracle之中所提供的数据类型,一共分为四类: 标量类型(SCALAR,或称基本数据类型) 用于保存单个值,例如:字符串.数字.日期.布尔: 标量类型只是作为单一类型的数据存在,有的 ...

  8. plsql programming 09 数字

    number 类型, 十进制数据类型(平台无关的) pls_integer 和 binary_integer 这两种数据类型和你底层硬件表示整数的方法完全一致, 这两种类型的运算是利用硬件原生, 机器 ...

  9. ORACLE与.NET类型对应关系(转)

    ORACLE与.NET类型对应关系 想来这个是最重要的事情了,因为多数情况下,我们使用dbhelper来调用数据库的时候,是因为如下三个地方导致错误: 1.错误的sql语句:末尾多了分号,少了部分关键 ...

随机推荐

  1. 《奋斗吧!菜鸟》 第九次作业:Beta冲刺 Scrum meeting 1

    项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11056511.html 团队名称 奋斗吧!菜鸟 作业学习目标 掌 ...

  2. 《你说对就队》第八次团队作业:Alpha冲刺 第四天

    <你说对就队>第八次团队作业:Alpha冲刺 第四天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  3. UVa 1671 语言的历史——判断两个DFA是否等价

    题意 一个DFA可以用一个5元组  $((Q, \sum , \delta , q_0, F))$ 表示,其中 $Q$ 为状态集,$\sum$ 为字母表,$\delta$ 为转移函数,$q_0$ 为起 ...

  4. python - Django - restframework 简单使用 和 组件

    FBV 和 CBV CBV 通过函数调用方法FBV 通过类调用方法    其本质上都是 CBV 但是 FBV 内部封装了关于 method 的方法,由于基本上都是前端的请求,所有像GET,POST等方 ...

  5. go协程的特点

    go奉行通过通信来共享内存,不像c和c++通过共享内存来通信 协程是轻量级的线程,编译器做优化** 有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 并行:多个cpu共同执行 并发 ...

  6. 1.6synchronized代码块

    1.synchronized可以使用任意的Object进行加锁,用法比较灵活 ============================================================= ...

  7. am335x system upgrade kernel ec20 simcom7600ce(十一)

    1      Scope of Document This document describes 4G hardware design, support quectel ec20 4G module/ ...

  8. 2-STM32+W5500+GPRS物联网开发基础篇-基础篇学习的内容

    https://www.cnblogs.com/yangfengwu/p/10936553.html 这次的基础篇为公开篇,将公开所有基础篇的资料和源码 现在说一下基础篇准备公开的内容:(大部分哈,要 ...

  9. leetcode解题报告(26):Add Binary

    描述 Given two binary strings, return their sum (also a binary string). For example, a = "11" ...

  10. luogu 2592 区间dp

    \(f_{i, j, a, b}\) 表示当前一共有 \(i\) 人排队, \(j\) 名男生,男生数目 - 女生数目为 \(a\), 女生数目 - 男生数目为 \(b\),\(a, b >= ...