PL/SQL - Строки: Пособие для начинающих

Здравствуйте, будущие маги PL/SQL! Сегодня мы отправляемся в увлекательное путешествие в мир строк в PL/SQL. Не волнуйтесь, если вы еще никогда не писали ни строчки кода — я буду вашим доброжелательным проводником, и мы будем двигаться шаг за шагом. К концу этого урока вы будете работать со строками, как профи!

PL/SQL - Strings

Что такое строки?

Прежде чем погружаться в детали, начнем с основ. В программировании строка — это простоsequence из символов. Это может быть слово, предложение или даже целый абзац. Представьте себе любой текст, который вы можете набрать на своей клавиатуре.

Объявление строковых переменных

В PL/SQL нам нужно объявлять свои переменные перед использованием. Это как представиться перед началом разговора — это просто iyi manners!

Основное объявление строки

Давайте начнем с самого простого способа объявления строковой переменной:

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

В этом примере:

  • Мы используем ключевое слово DECLARE, чтобы начать объявление переменных.
  • my_name — это имя нашей переменной.
  • VARCHAR2(50) означает, что это строка переменной длины, которая может содержать до 50 символов.
  • := — это оператор присваивания, как знак равенства.
  • 'John Doe' — это начальное значение, которое мы присваиваем my_name.

Когда мы запустим этот код, он выведет: "My name is: John Doe"

Использование различных типов строк

PL/SQL предлагает несколько типов строк. Давайте рассмотрим несколько из них:

DECLARE
v_varchar2 VARCHAR2(20) := 'Hello, World!';
v_char CHAR(10) := 'Fixed     ';
v_long LONG := 'This is a long string that can store up to 32,760 characters';
BEGIN
DBMS_OUTPUT.PUT_LINE('VARCHAR2: ' || v_varchar2);
DBMS_OUTPUT.PUT_LINE('CHAR: ' || v_char);
DBMS_OUTPUT.PUT_LINE('LONG: ' || v_long);
END;

Вот что происходит:

  • VARCHAR2 — это наиболее распространенный тип, хранящий строки переменной длины.
  • CHAR предназначен для строк с固定ной длиной. Обратите внимание, как он дополняет额外的 пробелами.
  • LONG может хранить очень большие строки, но он менее гибок в некоторых операциях.

Функции и операторы строк PL/SQL

Теперь, когда мы знаем, как объявлять строки, давайте повеселимся с ними!

Конкатенация

Конкатенация — это просто изысканное слово для "соединения строк". В PL/SQL мы используем оператор ||:

DECLARE
first_name VARCHAR2(20) := 'Jane';
last_name VARCHAR2(20) := 'Smith';
full_name VARCHAR2(41);
BEGIN
full_name := first_name || ' ' || last_name;
DBMS_OUTPUT.PUT_LINE('Full name: ' || full_name);
END;

Это выведет: "Full name: Jane Smith"

Строковые функции

PL/SQL предоставляет множество встроенных функций для работы со строками. Давайте рассмотрим некоторые из самых полезных:

Функция Описание Пример
UPPER Преобразует строку в верхний регистр UPPER('hello') возвращает 'HELLO'
LOWER Преобразует строку в нижний регистр LOWER('WORLD') возвращает 'world'
INITCAP Capitalizes first letter of each word INITCAP('john doe') возвращает 'John Doe'
LENGTH Возвращает длину строки LENGTH('OpenAI') возвращает 6
SUBSTR Извлекает часть строки SUBSTR('HelloWorld', 1, 5) возвращает 'Hello'
TRIM Удаляет указанные символы из начала/конца TRIM(' Hello ') возвращает 'Hello'
REPLACE Заменяет все occurrences of a substring REPLACE('JACK and JILL','J','BL') возвращает 'BLACK and BLILL'

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

DECLARE
v_string VARCHAR2(50) := '  hello, world!  ';
BEGIN
DBMS_OUTPUT.PUT_LINE('Original: ' || v_string);
DBMS_OUTPUT.PUT_LINE('UPPER: ' || UPPER(v_string));
DBMS_OUTPUT.PUT_LINE('LOWER: ' || LOWER(v_string));
DBMS_OUTPUT.PUT_LINE('INITCAP: ' || INITCAP(v_string));
DBMS_OUTPUT.PUT_LINE('LENGTH: ' || LENGTH(v_string));
DBMS_OUTPUT.PUT_LINE('SUBSTR: ' || SUBSTR(v_string, 3, 5));
DBMS_OUTPUT.PUT_LINE('TRIM: ' || TRIM(v_string));
DBMS_OUTPUT.PUT_LINE('REPLACE: ' || REPLACE(v_string, 'o', '0'));
END;

Этот код выведет:

Original:   hello, world!
UPPER:   HELLO, WORLD!
LOWER:   hello, world!
INITCAP:   Hello, World!
LENGTH: 16
SUBSTR: hello
TRIM: hello, world!
REPLACE:   hell0, w0rld!

Combining It All

Теперь давайте объединим все, что мы узнали, в более сложный пример:

DECLARE
v_sentence VARCHAR2(100) := 'The quick brown fox jumps over the lazy dog';
v_word VARCHAR2(20);
v_count NUMBER;
BEGIN
-- Count the number of words
v_count := LENGTH(v_sentence) - LENGTH(REPLACE(v_sentence, ' ', '')) + 1;
DBMS_OUTPUT.PUT_LINE('Number of words: ' || v_count);

-- Extract and capitalize the 4th word
v_word := INITCAP(SUBSTR(v_sentence,
INSTR(v_sentence, ' ', 1, 3) + 1,
INSTR(v_sentence, ' ', 1, 4) - INSTR(v_sentence, ' ', 1, 3) - 1));
DBMS_OUTPUT.PUT_LINE('The 4th word is: ' || v_word);

-- Replace 'fox' with 'cat' and 'dog' with 'mouse'
v_sentence := REPLACE(REPLACE(v_sentence, 'fox', 'cat'), 'dog', 'mouse');
DBMS_OUTPUT.PUT_LINE('Modified sentence: ' || v_sentence);
END;

Этот пример демонстрирует:

  1. Подсчет слов, подсчитывая пробелы
  2. Извлечение конкретного слова с помощью SUBSTR и INSTR
  3. Замену нескольких слов в предложении

Вывод:

Number of words: 9
The 4th word is: Fox
Modified sentence: The quick brown cat jumps over the lazy mouse

И вот оно! Вы только что сделали свои первые шаги в чудесном мире строк PL/SQL. Помните, что практика делает perfect, так что не бойтесь экспериментировать с этими функциями и создавать свои собственные приключения с манипуляцией строками.

Не пройдет и много времени, как вы начнете составлять сложные запросы и впечатлять своих друзей своим мастерством PL/SQL. Продолжайте программировать и удачи в работе со строками!

Credits: Image by storyset