有没有办法通过语言预定义的常量或函数来确定 pls_integer 的最大可能值?我可以在互联网上找到最大值 (2^31 - 1 = 2,147,483,647),但我不想硬编码。
干杯:)
我不认为这是可能的。为什么?因为它不是必需的 -PLS_INTEGER's
最大值是由于它的最大大小 - 4 个字节(并且它是有符号数据类型)。
更重要的是,正如有关 PL/SQL 数据类型的文档中所述,PLS_INTEGER
实际上是一个BINARY_INTEGER
. 查看PLS_INTEGER
Oracle的STANDARD
包中的定义:
subtype pls_integer is binary_integer;
然后看一下 的定义BINARY_INTEGER
:
subtype BINARY_INTEGER is INTEGER range '-2147483647'..2147483647;
在STANDARD
包头中,您找不到保存这些数据类型最大值的常量。
我认为没有任何常数可以使用;但是,如果不对任何值进行硬编码非常重要,您可以使用下面给出的方法计算最大值。
该解决方案基于最大值为 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