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