Oracle Типы данных PL/SQL: логическое значение, число, дата [Пример]

⚡ Умное резюме

Типы данных PL/SQL определяют, как Oracle Они хранят, обрабатывают и ограничивают каждое значение в блоке. Они группируются в семейства символьных, числовых, логических, датовых и больших объектов (LOB), каждое со своим собственным форматом хранения, ограничениями по размеру и правилами присваивания.

  • 🔤 Характер: CHAR имеет фиксированную длину, VARCHAR2 — переменную длину, а NCHAR и NVARCHAR2 используют национальный набор символов.
  • 🔢 Число: В переменной типа NUMBER хранятся значения с фиксированной или плавающей запятой с точностью до 38 знаков после запятой.
  • Логическое: Имеет значения TRUE или FALSE и используется преимущественно в условной логике.
  • 📅 Дата: Сохраняет дату и время, по умолчанию устанавливая значение на полночь, если время не указано.
  • 🇧🇷 ЛОБ: BLOB, CLOB, NCLOB и BFILE используются для хранения больших объемов неструктурированных данных до 128 ТБ.
  • Примечание: лучшие практики: Для экономии памяти и обеспечения перспективности используйте VARCHAR2 вместо CHAR и LOB вместо LONG.
  • 🔗 Объем: Типы SQL применяются к столбцам таблиц; типы PL/SQL используются внутри блоков PL/SQL.

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

Что такое типы данных в PL/SQL?

Типы данных В PL/SQL определяется, как данные будут храниться, обрабатываться и использоваться. Oracle в процессе хранения и обработки. Типы данных связаны с конкретным форматом хранения и ограничениями диапазона. OracleКаждому значению или константе присваивается тип данных.

Основное различие между PL/SQL и SQL Разница в типах данных заключается в том, что типы данных SQL ограничены столбцами таблиц, в то время как типы данных PL/SQL используются в других областях. PL/SQL-блоки. Подробнее об этом позже в уроке.

Ниже представлена ​​схема различных Oracle Типы данных PL/SQL:

Различные типы данных в PL/SQL
Различные типы данных в PL/SQL

Тип данных PL/SQL CHARACTER

Этот тип данных хранит буквенно-цифровые символы в строковом формате. При присваивании значений типа CHARACTER их всегда следует заключать в одинарные кавычки.

Этот символьный тип данных дополнительно классифицируется следующим образом:

  • Тип данных CHAR (фиксированный размер строки)
  • Тип данных VARCHAR2 (размер строки переменной)
  • тип данных VARCHAR
  • NCHAR (собственный фиксированный размер строки)
  • NVARCHAR2 (собственный размер строки переменной)
  • ДОЛГОЕ и ДЛИННОЕ СЫРОЕ
Тип данных Описание Синтаксис
CHAR Этот тип данных хранит строковое значение, и размер строки фиксируется в момент объявления. переменная.

  • Oracle Если переменная не занимает весь объявленный размер, она дополняется пустым символом, поэтому Oracle Выделяет память заявленного размера, даже если переменная её не заполняет.
  • Ограничение размера составляет 1-2000 байт.
  • Тип данных CHAR больше подходит в тех случаях, когда обрабатываются данные фиксированного размера.
grade CHAR;
manager CHAR (10):= 'guru99';

Объяснение синтаксиса:

  • Первое утверждение объявляет переменную 'grade' типа CHAR с максимальным размером в 1 байт (значение по умолчанию).
  • Второе утверждение объявляет переменную 'manager' типа CHAR с максимальным размером 10 и присваивает ей значение 'guru99', что составляет 6 байт. Oracle В данном случае выделяется 10 байтов вместо 6.
ВАРЧАР2 Этот тип данных хранит строку, но её длина не фиксирована.

  • Ограничение по размеру составляет 1-4000 байт для столбца таблицы и 1-32767 байт для переменной.
  • Размер каждой переменной определяется при её объявлении.
  • Oracle Выделяет память только после определения переменной, поэтому использует фактическую длину сохраненной строки, а не объявленный размер.
  • Для оптимизации использования памяти всегда лучше использовать VARCHAR2 вместо CHAR.
manager VARCHAR2(10) := 'guru99';

Объяснение синтаксиса:

  • В этом операторе объявляется переменная 'manager' типа VARCHAR2 с максимальным размером 10 и присваивается значение 'guru99', что составляет 6 байт. Oracle Здесь выделяется память всего в 6 байт.
ВАРЧАР Это синоним типа данных VARCHAR2.

  • Всегда рекомендуется использовать VARCHAR2 вместо VARCHAR, чтобы избежать изменений в поведении.
manager VARCHAR(10) := 'guru99';

Объяснение синтаксиса:

  • Данное утверждение объявляет переменную 'manager' типа VARCHAR с максимальным размером 10 и присваивает ей значение 'guru99', 6 байт. Oracle Выделяет всего 6 байт, аналогично VARCHAR2.
НЧАР Этот тип данных аналогичен типу CHAR, но используется национальная кодировка символов.

  • Этот набор символов можно определить для сеанса с помощью NLS_PARAMETERS.
  • Набор символов может быть UTF16 или UTF8.
  • Ограничение размера составляет 1-2000 байт.
native NCHAR(10);

Объяснение синтаксиса:

  • В этом операторе объявляется переменная 'native' типа данных NCHAR с максимальным размером 10.
  • Длина зависит от количества байтов на символ, определенного в наборе символов.
НВАРЧАР2 Этот тип данных аналогичен VARCHAR2, но используется национальная кодировка символов.

  • Этот набор символов можно определить для сеанса с помощью NLS_PARAMETERS.
  • Набор символов может быть UTF16 или UTF8.
  • Ограничение размера составляет 1-4000 байт.
Native_var NVARCHAR2(10):= 'guru99';

Объяснение синтаксиса:

  • Данное утверждение объявляет переменную 'Native_var' типа данных NVARCHAR2 с максимальным размером 10.
ДОЛГОЕ и ДЛИННОЕ СЫРОЕ Этот тип данных предназначен для хранения больших объемов текста или необработанных данных, максимальный размер которых не превышает 2 ГБ.

  • Они в основном используются в словаре данных.
  • Формат LONG хранит данные о наборе символов, а LONG RAW хранит данные в двоичном формате.
  • LONG RAW принимает медиаобъекты и изображения, тогда как LONG работает только с данными, которые можно сохранить с использованием кодировки символов.
Large_text LONG;
Large_raw LONG RAW;

Объяснение синтаксиса:

  • В этом операторе объявляются переменные типа LONG: 'Large_text' и 'Large_raw'.

Примечание: Использование типа данных LONG не рекомендуется. OracleВместо этого следует отдавать предпочтение типу данных LOB.

Тип данных PL/SQL NUMBER

Этот тип данных хранит числа с фиксированной или плавающей запятой с точностью до 38 знаков после запятой. Он используется для работы с полями, содержащими только числовые данные. Переменную можно объявить как с указанием точности и количества десятичных знаков, так и без них. При присваивании значения не обязательно заключать в кавычки.

A NUMBER(8,2);
B NUMBER(8);
C NUMBER;

Объяснение синтаксиса:

  • Первое объявление определяет переменную 'A' числового типа данных с точностью до 8 знаков после запятой и двумя десятичными знаками.
  • Во втором случае объявляется тип данных 'B' (число) с общей точностью 8 и без десятичных знаков.
  • Третий тип данных является наиболее общим и обозначает числовой тип данных «C» без ограничений по точности или количеству десятичных знаков. Он может содержать до 38 цифр.

Логический тип данных PL/SQL

Этот тип данных хранит логические значения. Oracle Логический тип данных обозначает либо TRUE, либо FALSE и используется в основном в условных операторах. При присваивании значений их не обязательно заключать в кавычки.

Var1 BOOLEAN;

Объяснение синтаксиса:

  • Переменная 'Var1' объявлена ​​как переменная логического типа (BOOLEAN). В зависимости от заданного условия, результат будет либо true, либо false.

Тип данных PL/SQL DATE

Этот тип данных хранит значения в формате даты: дата, месяц и год. Если переменная определена с типом данных DATE, она может содержать информацию о времени; по умолчанию время устанавливается на 12:00:00, если не указано иное. При присваивании значения необходимо заключать в кавычки.

Стандарт Oracle Формат времени для ввода и вывода — 'DD-MON-YY', который задается параметром NLS_PARAMETERS (NLS_DATE_FORMAT) на уровне сессии.

newyear DATE:= '01-JAN-2015';
current_date DATE:= SYSDATE;

Объяснение синтаксиса:

  • Переменная 'newyear' объявлена ​​как тип данных DATE и ей присвоено значение 1 января 2015 года.
  • Второе объявление указывает на тип данных DATE для переменной 'current_date' и присваивает ей текущую системную дату.
  • Обе переменные содержат информацию о времени.

Тип данных LOB PL/SQL

Этот тип данных в основном используется для хранения и обработки больших блоков неструктурированных данных, таких как изображения и мультимедийные файлы. Oracle Предпочтение отдается типу данных LOB, а не LONG, поскольку он более гибкий. Основные преимущества LOB перед LONG:

  • В таблице может быть только один столбец типа LONG, тогда как количество столбцов типа LOB не ограничено.
  • Инструменты интерфейса данных принимают LOB-объекты во время репликации, но не принимают столбцы типа LONG, которые необходимо реплицировать вручную.
  • В столбце LONG хранится до 2 ГБ данных, тогда как в LOB-объекте — до 128 ТБ.
  • Oracle Тип данных LOB постоянно совершенствуется с каждым релизом, в то время как тип LONG практически не меняется.

Поэтому всегда лучше использовать тип данных LOB вместо LONG. Различные типы данных LOB, перечисленные ниже, могут хранить до 128 терабайт данных:

  1. Большой двоичный объект
  2. КЛОБ и НКЛОБ
  3. БФАЙЛ
Тип данных Описание Синтаксис
Большой двоичный объект Этот тип данных хранит данные LOB в двоичном формате файла, максимальный размер которого составляет 128 ТБ. Он не хранит данные на основе кодировки символов, поэтому может хранить неструктурированные данные, такие как мультимедийные объекты и изображения.
Binary_data BLOB;

Объяснение синтаксиса:

  • Переменная 'Binary_data' объявлена ​​как BLOB-объект.
КЛОБ и НКЛОБ CLOB хранит данные LOB в кодировке символов, тогда как NCLOB хранит данные в собственной кодировке символов. Поскольку они используют хранение данных на основе кодировки символов, они не могут хранить такие данные, как мультимедиа или изображения. Максимальный размер составляет 128 ТБ.
Charac_data CLOB;

Объяснение синтаксиса:

  • Переменная 'Charac_data' объявлена ​​как объект типа CLOB.
БФАЙЛ
  • BFILE хранит неструктурированные двоичные данные вне базы данных в виде файла операционной системы.
  • Размер файла BFILE ограничен операционной системой, и эти файлы доступны только для чтения и не могут быть изменены.

Часто задаваемые вопросы (FAQ)

CHAR имеет фиксированную длину и дополняется пустыми значениями до заявленного размера, что приводит к нерациональному использованию пространства для коротких значений. VARCHAR2 имеет переменную длину и хранит только фактические символы, поэтому он предпочтительнее для большинства строковых столбцов.

LOB позволяет использовать множество столбцов в таблице, хранит до 128 ТБ данных и постоянно совершенствуется с каждым релизом. LONG ограничен одним столбцом, имеет максимальный размер 2 ГБ и сохранен в основном для обратной совместимости.

В более старых версиях это было не так. Тип BOOLEAN был доступен только в PL/SQL, поэтому в столбцах таблиц вместо него использовался флаг NUMBER или CHAR. Он используется непосредственно внутри блоков для условной логики.

Да. Анализируя значения выборки по длине, диапазону и формату, ИИ может предложить VARCHAR2, NUMBER, DATE или LOB, а также отметить столбцы с избыточным размером. Подтвердите выбор на основе будущих данных.

Да. Параметр DATE хранит век, год, месяц, день, час, минуту и ​​секунду. Если время не указано, по умолчанию используется полночь. Для указания долей секунды или часовых поясов используйте параметр TIMESTAMP.

Подведем итог этой публикации следующим образом: