2013-10-24 59 views

回答

2

我不認爲這是可能的。爲什麼?因爲它不是必需的 - PLS_INTEGER's最大值是由於它的最大大小 - 4字節(它是一個有符號數據類型)。

更何況,如documentation about PL/SQL datatypes,PLS_INTEGER中所述,實際上是BINARY_INTEGER。看看在Oracle的STANDARD包的PLS_INTEGER定義:

subtype pls_integer is binary_integer; 

再看看的BINARY_INTEGER定義:

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

無處的STANDARD包的頭部,你可以找到一個常數它保存這些數據類型的最大值。

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