VARCHAR2 в Oracle SQL. Введение
Тип данных VARCHAR2 в Oracle SQL используется для хранения строк переменной длины. Он позволяет сохранять текст от одного до 32 767 байт (в зависимости от режима), при этом экономит место по сравнению с CHAR. В этой статье ты найдёшь 50 примеров использования VARCHAR2 в таблицах, выражениях, функциях и PL/SQL.
🖋️ Синтаксис объявления VARCHAR2
-- В таблице:
CREATE TABLE users (
username VARCHAR2(50),
email VARCHAR2(100)
);
-- В PL/SQL:
DECLARE
v_text VARCHAR2(200);
BEGIN
v_text := 'Пример';
END;
Параметры:
VARCHAR2(n)— гдеnв байтах или символах (BYTE | CHAR)- Максимум: 4000 байт в SQL, 32767 байт в PL/SQL
🔄 Где используется VARCHAR2
- Столбцы таблиц с текстом
- Параметры процедур и функций
- Переменные в PL/SQL
- Представления, логи, JSON
- Форматирование и проверка ввода
📊 Примеры использования VARCHAR2 в Oracle SQL (45 примеров)
- Объявление поля в таблице:
CREATE TABLE books (
title VARCHAR2(200)
);
- Использование в SELECT:
SELECT title FROM books WHERE title LIKE 'SQL%';
- Присваивание в PL/SQL:
DECLARE
v_name VARCHAR2(50);
BEGIN
v_name := 'Oracle';
END;
- Ограничение длины поля:
CREATE TABLE people (
phone VARCHAR2(15)
);
- Сравнение строк:
SELECT * FROM users WHERE username = 'admin';
- Создание таблицы с несколькими VARCHAR2:
CREATE TABLE clients (
name VARCHAR2(100),
email VARCHAR2(150),
city VARCHAR2(80)
);
- Использование VARCHAR2 с ограничением NOT NULL:
CREATE TABLE sessions (
session_id VARCHAR2(50) NOT NULL
);
- INSERT строки в VARCHAR2 поле:
INSERT INTO books (title) VALUES ('Oracle SQL Guide');
- Условие LIKE с VARCHAR2:
SELECT * FROM clients WHERE name LIKE 'A%';
- Проверка длины строки:
SELECT name FROM clients WHERE LENGTH(name) > 10;
- Сравнение с UPPER:
SELECT * FROM users WHERE UPPER(username) = 'ADMIN';
- Использование INSTR:
SELECT * FROM users WHERE INSTR(email, '@') > 0;
- CONCAT с VARCHAR2:
SELECT first_name || ' ' || last_name AS full_name FROM employees;
- Использование REGEXP_LIKE:
SELECT * FROM emails WHERE REGEXP_LIKE(address, '^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$');
- Присваивание значения через SELECT INTO:
DECLARE v_title VARCHAR2(200);
BEGIN
SELECT title INTO v_title FROM books WHERE book_id = 1;
END;
- Преобразование в верхний регистр:
SELECT UPPER(title) FROM books;
- Преобразование в нижний регистр:
SELECT LOWER(title) FROM books;
- Использование TRIM:
SELECT TRIM(' SQL ') FROM dual;
- Использование INITCAP:
SELECT INITCAP('oracle database') FROM dual;
- Вставка строки с кавычками:
INSERT INTO notes (text) VALUES ('Это "цитата" в тексте');
- Обработка NULL значений:
SELECT NVL(middle_name, '—') FROM employees;
- Использование CASE с VARCHAR2:
SELECT name,
CASE status
WHEN 'A' THEN 'Активен'
WHEN 'I' THEN 'Неактивен'
ELSE 'Неизвестно'
END AS статус
FROM clients;
- Объединение строк через LISTAGG:
SELECT LISTAGG(name, ', ') WITHIN GROUP (ORDER BY name) AS all_names FROM clients;
- VARCHAR2 в функциях:
CREATE FUNCTION get_city RETURN VARCHAR2 IS
BEGIN
RETURN 'Moscow';
END;
- VARCHAR2 как параметр процедуры:
CREATE PROCEDURE greet_user(p_name VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Привет, ' || p_name);
END;
- Использование VARCHAR2 в CTE:
WITH cities AS (
SELECT 'London' AS city FROM dual
)
SELECT * FROM cities;
- Хранение JSON как строка:
CREATE TABLE settings (
key VARCHAR2(50),
value VARCHAR2(4000)
);
- VARCHAR2 с DEFAULT:
CREATE TABLE orders (
status VARCHAR2(20) DEFAULT 'NEW'
);
- Подсчёт количества символов:
SELECT LENGTH(email) FROM users;
- Проверка пустых строк:
SELECT * FROM notes WHERE TRIM(text) IS NULL;
- Использование LPAD:
SELECT LPAD(id, 5, '0') FROM orders;
- Использование RPAD:
SELECT RPAD(name, 10, '.') FROM clients;
- Проверка окончания строки:
SELECT * FROM files WHERE filename LIKE '%.pdf';
- Работа с SUBSTR:
SELECT SUBSTR(title, 1, 10) FROM books;
- Условие LIKE с ESCAPE:
SELECT * FROM logs WHERE message LIKE '100\%%' ESCAPE '\';
- Сравнение строк с COLLATE:
SELECT * FROM users WHERE username COLLATE BINARY_CI = 'admin';
- Сортировка по строковому полю:
SELECT * FROM clients ORDER BY name;
- VARCHAR2 с индексом:
CREATE INDEX idx_username ON users (username);
- Хранимая функция с RETURN VARCHAR2:
CREATE FUNCTION get_status RETURN VARCHAR2 IS
BEGIN
RETURN 'OK';
END;
- VARCHAR2 в аналитике:
SELECT name, ROW_NUMBER() OVER (ORDER BY name) FROM clients;
- Проверка значений через IN:
SELECT * FROM users WHERE role IN ('admin', 'user');
- Преобразование числа в строку:
SELECT TO_CHAR(12345) FROM dual;
- SELECT с JSON_OBJECT:
SELECT JSON_OBJECT('name' VALUE name) FROM clients;
- INSERT с UPPER:
INSERT INTO users (username) VALUES (UPPER('ivan'));
- SELECT с REGEXP_REPLACE:
SELECT REGEXP_REPLACE('abc123', '\d', '') FROM dual;
📆 Заключение: как правильно использовать VARCHAR 2 в Oracle SQL
Тип VARCHAR2 — это универсальный способ хранить строки разной длины в Oracle. Он подходит для почти всех текстовых операций — от email до описаний. Правильный выбор длины, CHAR/BYTE и грамотное использование с функциями позволяет эффективно управлять текстом в базе.
🕸️ Следующая статья:
COALESCE в Oracle SQL — первое не NULL значение