Тип данных PLS_INTEGER в PL/SQL Oracle
Тип данных PLS_INTEGER позволяет хранить целые числа в диапазоне от −2 147 483 648 до 2 147 483 647. Значения хранятся в «родном» целочисленном формате аппаратной платформы.
Несколько примеров объявлений переменных типа PLS_INTEGER:
DECLARE loop_counter PLS_INTEGER; days_in_standard_year CONSTANT PLS_INTEGER := 365; emp_vacation_days PLS_INTEGER DEFAULT 14;
Тип данных PLS_INTEGER был разработан для увеличения скорости вычислений. В результате операции со значениями типа PLS_INTEGER выполняются быстрее операций со значениями NUMBER. А поскольку значения PLS_INTEGER целочисленные, проблем совместимости при переходе с одной платформы на другую из-за них практически не бывает.
Используйте PLS_INTEGER, если ваша программа интенсивно выполняет целочисленные операции. Однако следует помнить, что в выражениях, где приходится выполнять частые преобразования к типу NUMBER и обратно, лучше изначально использовать тип NUMBER. Наибольшая эффективность достигается при использовании PLS_INTEGER для целочисленной арифметики (и счетчиков циклов) там, где удается избежать многочисленных преобразований к типу NUMBER и обратно. Как показывает следующий пример, при использовании этого типа в целочисленной арифметике полученные значения округляются до целых чисел:
DECLARE
int1 PLS_INTEGER;
int2 PLS_INTEGER;
int3 PLS_INTEGER;
nbr NUMBER;
BEGIN
int1 := 100;
int2 := 49;
int3 := int2/int1;
nbr := int2/int1;
DBMS_OUTPUT.PUT_LINE('integer 49/100 =' || TO_CHAR(int3));
DBMS_OUTPUT.PUT_LINE('number 49/100 =' || TO_CHAR(nbr));
int2 := 50;
int3 := int2/int1;
nbr := int2/int1;
DBMS_OUTPUT.PUT_LINE('integer 50/100 =' || TO_CHAR(int3));
DBMS_OUTPUT.PUT_LINE('number 50/100 =' || TO_CHAR(nbr));
END;
/*
Программа выводит следующий результат:
integer 49/100 =0
number 49/100 =.49
integer 50/100 =1
number 50/100 =.5
*/
Если итоговое значение целочисленной операции выходит за пределы диапазона допустимых значений (от −2 147 483 648 до 2 147 483 647), произойдет ошибка целочисленного переполнения.
Метки: Oracle, PLS_INTEGER, Тип данных, Числа.
Добрый. в примере в DBMS_OUTPUT
не 100/49 и 100/50
а 49/100 и 50/100.
Спасибо за статью!
Андрей, спасибо за внимательность :)