OceanBaseデータベースのPLデータ型において、PLS_INTEGER と BINARY_INTEGER は同じです。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
PLS_INTEGER は符号付き整数を格納し、その範囲は -2,147,483,648 から 2,147,483,647 までで、32ビットを占有します。NUMBER 型と比較して、PLS_INTEGER はストレージ容量が少なく、計算処理も効率的です。
2つの PLS_INTEGER 型の計算結果が PLS_INTEGER の値域を超えた場合、データベースはエラーを返します。データサイズが PLS_INTEGER の範囲を超える場合は、組み込み型の INTEGER に置き換える必要があります。
以下の例のように、最終的に NUMBER 型の変数に代入する場合でも、エラーが発生します。
obclient> DECLARE
num1 PLS_INTEGER := 2147483647;
num2 PLS_INTEGER := 1;
total NUMBER;
BEGIN
total := num1 + num2;
DBMS_OUTPUT.PUT_LINE(total);
END;
/
OBE-01426: numeric overflow
解決策は、少なくとも一方の変数を INTEGER に置き換えることです。以下の例を参照してください:
obclient> DECLARE
num1 PLS_INTEGER := 2147483647;
num2 INTEGER := 1;
total NUMBER;
BEGIN
total := num1 + num2;
DBMS_OUTPUT.PUT_LINE(total);
END;
/
Query OK, 0 rows affected
2147483648