Погружение в базы данных Oracle

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Купить книгу

 ›  ›  ›  › Тип данных PLS_INTEGER в PL/SQL Oracle

Тип данных 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 100/49 =' || TO_CHAR(int3));
  DBMS_OUTPUT.PUT_LINE('number  100/49 =' || TO_CHAR(nbr));
  int2 := 50;
  int3 := int2/int1;
  nbr  := int2/int1;
  DBMS_OUTPUT.PUT_LINE('integer 100/50 =' || TO_CHAR(int3));
  DBMS_OUTPUT.PUT_LINE('number  100/50 =' || TO_CHAR(nbr));
END;

/*
Программа выводит следующий результат:
integer 100/49 =0
number  100/49 =.49
integer 100/50 =1
number  100/50 =.5
*/

Если итоговое значение целочисленной операции выходит за пределы диапазона допустимых значений (от −2 147 483 648 до 2 147 483 647), произойдет ошибка целочисленного переполнения.

Метки: , , , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *