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

Здравствуйте,野心勃勃的程序设计师们! Сегодня мы окунемся в fascinирующий мир типов данных PL/SQL. Не волнуйтесь, если вы новички в программировании; я буду вести вас по этому пути шаг за шагом. К концу этого урока вы будете чувствовать себя комфортно с различными типами данных в PL/SQL и будете готовы начать свое coding приключение!

PL/SQL - Data Types

PL/SQL скалярные типы данных и подтипы

Давайте начнем с азов. В PL/SQL скалярные типы данных являются строительными блоками наших программ. Они представляют собой единичные значения, такие как числа или текст.

Что такое скалярные типы данных?

Скалярные типы данных являются simplest формой данных в PL/SQL. Они resemble атомы нашего программного мира - малые, неделимые единицы, которые мы используем для создания более сложных структур.

Вот простой пример для проиллюстрирования скалярного типа данных:

DECLARE
my_name VARCHAR2(50) := 'John Doe';
BEGIN
DBMS_OUTPUT.PUT_LINE('My name is: ' || my_name);
END;

В этом примере my_name - это переменная типа VARCHAR2, которая используется для хранения текста. Мы присвоили ей значение 'John Doe'. Когда мы выполним этот код, он выведет: "My name is: John Doe".

PL/SQL числовые типы данных и подтипы

Теперь давайте поговорим о числах. PL/SQL имеет несколько числовых типов данных для обработки различных видов чисел.

Общие числовые типы данных

Тип данных Описание Пример
NUMBER Общий-purpose число NUMBER(10,2)
INTEGER Целые числа INTEGER
BINARY_FLOAT 32-битное浮点数 BINARY_FLOAT
BINARY_DOUBLE 64-битное浮点数 BINARY_DOUBLE

Давайте посмотрим, как они работают:

DECLARE
my_integer INTEGER := 42;
my_float BINARY_FLOAT := 3.14;
my_salary NUMBER(8,2) := 5000.50;
BEGIN
DBMS_OUTPUT.PUT_LINE('The answer is: ' || my_integer);
DBMS_OUTPUT.PUT_LINE('Pi is approximately: ' || my_float);
DBMS_OUTPUT.PUT_LINE('My salary is: $' || my_salary);
END;

Этот скрипт declares три переменные с различными числовыми типами. Тип NUMBER(8,2) для my_salary означает, что он может хранить до 8 цифр в целом, с 2 цифрами после десятичной точки.

PL/SQL字符数据 типы и подтипы

Текстовые данные имеют важное значение в программировании. PL/SQL предоставляет несколько character данных типов для эффективной обработки текста.

Общие типы данных символов

Тип данных Описание Пример
VARCHAR2 Variable-length строка символов VARCHAR2(100)
CHAR Fixed-length строка символов CHAR(10)
NVARCHAR2 Variable-length unicode строка NVARCHAR2(100)
NCHAR Fixed-length unicode строка NCHAR(10)

Вот как мы используем их на практике:

DECLARE
my_varchar VARCHAR2(50) := 'Hello, World!';
my_char CHAR(10) := 'Fixed     ';
my_nvarchar NVARCHAR2(50) := N'こんにちは'; -- Японский "Привет"
BEGIN
DBMS_OUTPUT.PUT_LINE('VARCHAR2: ' || my_varchar);
DBMS_OUTPUT.PUT_LINE('CHAR: ' || my_char || '(end)');
DBMS_OUTPUT.PUT_LINE('NVARCHAR2: ' || my_nvarchar);
END;

Обратите внимание, как тип CHAR дополняет строку пробелами, чтобы заполнить его фиксированную длину.

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

Логические типы данных необходимы для принятия решений в наших программах. Они могут принимать три возможных значения: TRUE, FALSE или NULL.

DECLARE
is_student BOOLEAN := TRUE;
has_job BOOLEAN := FALSE;
is_married BOOLEAN;
BEGIN
IF is_student THEN
DBMS_OUTPUT.PUT_LINE('This person is a student.');
END IF;

IF NOT has_job THEN
DBMS_OUTPUT.PUT_LINE('This person does not have a job.');
END IF;

IF is_married IS NULL THEN
DBMS_OUTPUT.PUT_LINE('We don''t know if this person is married.');
END IF;
END;

Этот скрипт demonstrates, как мы используем логические значения для принятия решений в нашем коде.

PL/SQL типы данных datetime и interval

При работе с датами и временем PL/SQL предоставляет специфические типы данных для точной обработки этих значений.

Общие типы datetime

Тип данных Описание Пример
DATE Дата и время DATE
TIMESTAMP Дата и время с дробными секундами TIMESTAMP
INTERVAL YEAR TO MONTH Период времени в годах и месяцах INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND Период времени в днях, часах, минутах и секундах INTERVAL DAY TO SECOND

Давайте посмотрим, как они работают:

DECLARE
current_date DATE := SYSDATE;
future_date TIMESTAMP := SYSTIMESTAMP + INTERVAL '1' YEAR;
age_interval INTERVAL YEAR TO MONTH;
BEGIN
age_interval := (SYSDATE - TO_DATE('1990-01-01', 'YYYY-MM-DD')) YEAR TO MONTH;

DBMS_OUTPUT.PUT_LINE('Current date: ' || TO_CHAR(current_date, 'DD-MON-YYYY'));
DBMS_OUTPUT.PUT_LINE('Date after 1 year: ' || TO_CHAR(future_date, 'DD-MON-YYYY HH24:MI:SS.FF'));
DBMS_OUTPUT.PUT_LINE('Age: ' || age_interval);
END;

Этот скрипт demonstrates работу с датами, метками времени и интервалами.

PL/SQL Large Object (LOB) типы данных

Для обработки больших объемов данных PL/SQL предоставляет LOB (Large Object) типы данных.

Общие LOB типы

Тип данных Описание Пример
CLOB Character Large Object CLOB
BLOB Binary Large Object BLOB
NCLOB National Character Large Object NCLOB

Вот простой пример использования CLOB:

DECLARE
my_clob CLOB;
BEGIN
my_clob := 'This is a very long string that could potentially be several megabytes in size.';
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.GETLENGTH(my_clob) || ' characters long');
END;

Этот скрипт создает CLOB и demonstrates, как получить его длину.

PL/SQL пользовательские подтипы

PL/SQL позволяет вам создавать свои собственные подтипы на основе существующих типов данных. Это может помочь сделать ваш код более читаемым и легко maintainable.

DECLARE
SUBTYPE positive_number IS NUMBER(8,2) CHECK (positive_number > 0);
my_salary positive_number;
BEGIN
my_salary := 5000.50;
DBMS_OUTPUT.PUT_LINE('My salary: $' || my_salary);

-- Это вызвало бы ошибку:
-- my_salary := -1000;
END;

В этом примере мы создали подтип positive_number, который ensures, что значение всегда положительное.

NULL значения в PL/SQL

Наконец, давайте поговорим о NULL значениях. В PL/SQL NULL представляет собой неизвестное или недоступное значение. Он не такой, как ноль или пустая строка.

DECLARE
var1 NUMBER;
var2 VARCHAR2(10) := '';
BEGIN
IF var1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE('var1 is NULL');
END IF;

IF var2 IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('var2 is not NULL, it''s an empty string');
END IF;
END;

Этот скрипт demonstrates разницу между NULL и пустой строкой.

И вот и все! Мы рассмотрели основные типы данных в PL/SQL. Помните, что понимание типов данных является crucial для написания эффективного и безошибочного кода. Continue practicing, и вскоре вы станете профессионалом в PL/SQL!

Credits: Image by storyset