有沒有辦法通過語言預定義常量或函數來確定pls_integer的最大可能值?我可以在網上找到最大值(2^31 - 1 = 2,147,483,647),但我不想對它進行硬編碼。有沒有辦法讓PL/SQL最大化pls_integer?
乾杯:)
有沒有辦法通過語言預定義常量或函數來確定pls_integer的最大可能值?我可以在網上找到最大值(2^31 - 1 = 2,147,483,647),但我不想對它進行硬編碼。有沒有辦法讓PL/SQL最大化pls_integer?
乾杯:)
我不認爲這是可能的。爲什麼?因爲它不是必需的 - 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
包的頭部,你可以找到一個常數它保存這些數據類型的最大值。
我不認爲你可以使用任何常數;但是,如果不對任何值進行硬編碼非常重要,則可以使用下面給出的方法計算最大值。
該解決方案基於以下假設:最大值將以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