Oracle PL/SQL типове данни: Boolean, Number, Date [Пример]

⚡ Умно обобщение

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

  • 🔤 Характер: CHAR е с фиксирана дължина, VARCHAR2 е с променлива дължина, а NCHAR и NVARCHAR2 използват националния набор от символи.
  • 🔢 Брой: NUMBER съхранява фиксирани или плаващи стойности с точност до 38 цифри.
  • Булева стойност: Приема стойности TRUE или FALSE и се използва главно в условната логика.
  • 📅 Дата: Запазва дата и час, като по подразбиране се използва полунощ, когато не е зададен час.
  • 🗂️ ЛОБ: BLOB, CLOB, NCLOB и BFILE съхраняват големи неструктурирани данни до 128 TB.
  • 💡 Най-добри практики: Предпочитайте 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 (размер на собствения променлив низ)
  • ДЪЛГО и ДЪЛГО СУРОВО
Тип данни Descriptйон Синтаксис
CHAR Този тип данни съхранява низова стойност, а размерът на низа е фиксиран в момента на деклариране. променлив.

  • Oracle допълва променливата с празен знак, ако тя не заема целия деклариран размер, така че Oracle заделя памет за декларирания размер, дори ако променливата не я запълва.
  • Ограничението за размер е 1-2000 байта.
  • CHAR е по-подходящ, когато се обработва фиксиран размер данни.
grade CHAR;
manager CHAR (10):= 'guru99';

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

  • Първото изречение декларира променливата „grade“ от тип данни CHAR с максимален размер от 1 байт (стойност по подразбиране).
  • Вторият оператор декларира променливата „manager“ от тип данни CHAR с максимален размер 10 и ѝ присвоява стойност „guru99“, която е 6 байта. Oracle в този случай разпределя 10 байта, а не 6.
VARCHAR2 Този тип данни съхранява низ, но дължината му не е фиксирана.

  • Ограничението за размер е 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.
NCHAR Този тип данни е същият като CHAR, но наборът от символи е национален набор от символи.

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

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

  • Операторът декларира променливата „native“ от тип данни NCHAR с максимален размер 10.
  • Дължината зависи от броя байтове на символ, дефинирани в набора от символи.
NVARCHAR2 Този тип данни е същият като VARCHAR2, но наборът от символи е национален набор от символи.

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

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

  • Операторът декларира променливата „Native_var“ от тип данни NVARCHAR2 с максимален размер 10.
ДЪЛГО и ДЪЛГО СУРОВО Този тип данни съхранява голям текст или сурови данни с максимален размер до 2 GB.

  • Те се използват главно в речника на данните.
  • LONG съхранява данни за набор от символи, докато LONG RAW съхранява данни в двоичен формат.
  • LONG RAW приема медийни обекти и изображения, докато LONG работи само с данни, които могат да бъдат съхранени с помощта на набор от символи.
Large_text LONG;
Large_raw LONG RAW;

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

  • Операторът декларира „Large_text“ от тип данни LONG и „Large_raw“ от тип данни LONG RAW.

Забележка: Използването на типа данни LONG не се препоръчва от OracleВместо това, типът данни LOB трябва да бъде предпочитан.

PL/SQL NUMBER тип данни

Този тип данни съхранява числа с фиксирана или плаваща запетая с точност до 38 цифри. Използва се за работа с полета, които съдържат само числови данни. Променливата може да бъде декларирана или с точност и десетични цифри, или без тях. Стойностите не е необходимо да бъдат заграждани в кавички при присвояване.

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

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

  • Първата декларация декларира променливата 'A' от числов тип данни с обща точност 8 и 2 десетични цифри.
  • Вторият декларира 'B' от числов тип данни с обща точност 8 и без десетични цифри.
  • Третият е най-общият, декларирайки „C“ от числов тип данни без ограничение за точност или десетични знаци. Може да приема до 38 цифри.

PL/SQL тип данни BOOLEAN

Този тип данни съхранява логически стойности. Oracle Булев тип данни представлява или TRUE, или FALSE и се използва главно в условни оператори. Стойностите не е необходимо да се затварят в кавички, когато се присвояват.

Var1 BOOLEAN;

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

  • Променливата „Var1“ е декларирана като тип данни BOOLEAN. Изходът ще бъде или true, или false в зависимост от зададеното условие.

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

Този тип данни съхранява стойности във формат на дата, като дата, месец и година. Винаги, когато променлива е дефинирана с тип данни DATE, тя може да съдържа информация за времето; по подразбиране времето е зададено на 12:00:00, ако не е посочено. Стойностите трябва да бъдат оградени в кавички, когато се присвояват.

Стандарт Oracle Форматът на времето за вход и изход е „ДД-ПОН-ГГ“, който е зададен в NLS_PARAMETERS (NLS_DATE_FORMAT) на ниво сесия.

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

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

  • Променливата „newyear“ е декларирана като тип данни DATE и ѝ е присвоена стойност 1 януари 2015 г.
  • Втората декларация декларира 'current_date' като тип данни DATE и присвоява текущата системна дата.
  • И двете променливи съдържат информация за времето.

PL/SQL LOB тип данни

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

  • Таблицата е ограничена до една LONG колона, докато няма ограничение за броя на LOB колоните.
  • Инструментите за интерфейс за данни приемат LOB по време на репликация, но пропускат LONG колони, които трябва да се репликират ръчно.
  • Дългата колона съхранява до 2 GB, докато LOB може да съхранява до 128 TB.
  • Oracle продължава да подобрява типа данни LOB с всяка версия, докато LONG е до голяма степен непроменен.

Така че винаги е добре да използвате типа данни LOB вместо LONG. Различните типове данни LOB по-долу могат да съхраняват до 128 терабайта:

  1. петна
  2. CLOB и NCLOB
  3. BFILE
Тип данни Descriptйон Синтаксис
петна Този тип данни съхранява LOB данни в двоичен файлов формат до максимум 128 TB. Той не съхранява данни въз основа на подробности за набор от символи, така че може да съхранява неструктурирани данни, като например мултимедийни обекти и изображения.
Binary_data BLOB;

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

  • Променливата „Binary_data“ е декларирана като BLOB.
CLOB и NCLOB CLOB съхранява LOB данни в набора от символи, докато NCLOB съхранява данни в оригиналния набор от символи. Тъй като тези устройства използват хранилище, базирано на набор от символи, не могат да съхраняват данни като мултимедия или изображения. Максималният размер е 128 TB.
Charac_data CLOB;

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

  • Променливата „Charac_data“ е декларирана като тип данни CLOB.
BFILE
  • BFILE съхранява неструктурирани двоични данни извън базата данни като файл на операционната система.
  • Размерът на BFILE е ограничен от операционната система, а файловете са само за четене и не могат да бъдат променяни.

Въпроси и Отговори

CHAR е с фиксирана дължина и допълва с празни места до декларирания размер, като по този начин се губи място при къси стойности. VARCHAR2 е с променлива дължина и съхранява само действителните символи, така че е предпочитан за повечето колони с низове.

LOB позволява много колони на таблица, съхранява до 128 TB и продължава да се подобрява с всяка версия. LONG е ограничен до една колона, с лимит от 2 GB и се запазва главно за обратна съвместимост.

Не е било в по-старите версии. BOOLEAN беше само PL/SQL тип, така че колоните в таблицата използваха флаг NUMBER или CHAR. Използва се директно вътре в блокове за условна логика.

Да. Чрез профилиране на примерни стойности за дължина, диапазон и формат, изкуственият интелект може да предложи VARCHAR2, NUMBER, DATE или LOB и да маркира колони, които са прекалено големи. Потвърдете избора си спрямо бъдещи данни.

Да. DATE съхранява век, година, месец, ден, час, минута и секунда. Ако не е зададен час, по подразбиране се използва полунощ. За дробни секунди или часови зони използвайте TIMESTAMP.

Обобщете тази публикация с: