有没有办法获得PL / SQL最大值pls_integer?

时间:2013-10-24 16:27:14

标签: oracle plsql

有没有办法通过语言预定义常量或函数来确定pls_integer的最大可能值?我可以在互联网上找到最大值(2 ^ 31 - 1 = 2,147,483,647),但我不想硬编码。

干杯:)

2 个答案:

答案 0 :(得分:2)

我不认为这是可能的。为什么?因为不需要它 - PLS_INTEGER's最大值是由于它的最大大小 - 4个字节(并且它是一个有符号的数据类型)。

此外,正如documentation about PL/SQL datatypes中所述,PLS_INTEGER实际上是BINARY_INTEGER。查看Oracle PLS_INTEGER包中STANDARD的定义:

subtype pls_integer is binary_integer;

然后看一下BINARY_INTEGER的定义:

subtype BINARY_INTEGER is INTEGER range '-2147483647'..2147483647;

STANDARD包头中没有任何地方可以找到一个保持这些数据类型的最大值的常量。

答案 1 :(得分:1)

我不认为你可以使用任何常数;但是,如果不对任何值进行硬编码至关重要,可以使用下面给出的方法计算最大值。

此解决方案基于以下假设:最大值将采用2 ^ b-1的形式,其中b是位数。

这是您可以使用的功能:

CREATE FUNCTION MAX_PLS_INTEGER_SIZE RETURN PLS_INTEGER AS 
  p PLS_INTEGER;
  b NUMBER;
BEGIN
  b := 0;
  WHILE TRUE LOOP
    BEGIN
      p := POWER(2, b)-1;

      b := b + 1;
      EXCEPTION WHEN OTHERS THEN
        EXIT;
    END; 
  END LOOP;

  RETURN p;
end;

创建函数后,您可以对其进行测试:

SELECT MAX_PLS_INTEGER_SIZE FROM DUAL;

结果:

MAX_PLS_INTEGER_SIZE
--------------------
2147483647