Учебники

PL / SQL – Строки

Строка в PL / SQL на самом деле представляет собой последовательность символов с необязательной спецификацией размера. Символы могут быть числовыми, буквами, пробелами, специальными символами или их комбинацией. PL / SQL предлагает три вида строк –

  • Строки фиксированной длины – в таких строках программисты задают длину при объявлении строки. Строка дополняется справа пробелами до указанной длины.

  • Строки переменной длины. В таких строках указывается максимальная длина строки до 32 767, и заполнение не выполняется.

  • Большие символьные объекты (CLOB) – это строки переменной длины, которые могут быть длиной до 128 терабайт.

Строки фиксированной длины – в таких строках программисты задают длину при объявлении строки. Строка дополняется справа пробелами до указанной длины.

Строки переменной длины. В таких строках указывается максимальная длина строки до 32 767, и заполнение не выполняется.

Большие символьные объекты (CLOB) – это строки переменной длины, которые могут быть длиной до 128 терабайт.

Строки PL / SQL могут быть переменными или литералами. Строковый литерал заключен в кавычки. Например,

'This is a string literal.' Or 'hello world'

Чтобы включить одинарную кавычку в строковый литерал, вам нужно напечатать две одинарные кавычки рядом друг с другом. Например,

'this isn''t what it looks like'

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

База данных Oracle предоставляет множество типов строковых данных, таких как CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB и NCLOB. Типы данных с префиксом ‘N’ являются типами данных ‘набор национальных символов’ , в которых хранятся данные символов Unicode.

Если вам нужно объявить строку переменной длины, вы должны указать максимальную длину этой строки. Например, тип данных VARCHAR2. В следующем примере показано объявление и использование некоторых строковых переменных:

DECLARE 
   name varchar2(20); 
   company varchar2(30); 
   introduction clob; 
   choice char(1); 
BEGIN 
   name := 'John Smith'; 
   company := 'Infotech'; 
   introduction := ' Hello! I''m John Smith from Infotech.'; 
   choice := 'y'; 
   IF choice = 'y' THEN 
      dbms_output.put_line(name); 
      dbms_output.put_line(company); 
      dbms_output.put_line(introduction); 
   END IF; 
END; 
/

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –

John Smith 
Infotech
Hello! I'm John Smith from Infotech.  

PL/SQL procedure successfully completed

Чтобы объявить строку фиксированной длины, используйте тип данных CHAR. Здесь вам не нужно указывать максимальную длину для переменной фиксированной длины. Если вы отмените ограничение длины, Oracle Database автоматически использует максимальную требуемую длину. Следующие два объявления идентичны –

red_flag CHAR(1) := 'Y'; 
 red_flag CHAR   := 'Y';

Строковые функции и операторы PL / SQL

PL / SQL предлагает оператор конкатенации (||) для объединения двух строк. В следующей таблице представлены строковые функции, предоставляемые PL / SQL –

S.No Функция и цель
1

ASCII , (х);

Возвращает значение ASCII символа x.

2

CHR , (х);

Возвращает символ со значением ASCII x.

3

КОНКАТ (х, у);

Объединяет строки x и y и возвращает добавленную строку.

4

INITCAP (х);

Преобразует начальную букву каждого слова в x в верхний регистр и возвращает эту строку.

5

INSTR (x, find_string [, start] [, вхождение]);

Ищет find_string в x и возвращает позицию, в которой это происходит.

6

INSTRB (х);

Возвращает расположение строки в другой строке, но возвращает значение в байтах.

7

ДЛИНА (х);

Возвращает количество символов в х.

8

LENGTHB (х);

Возвращает длину строки символов в байтах для однобайтового набора символов.

9

НИЖНИЙ (х);

Преобразует буквы в x в нижний регистр и возвращает эту строку.

10

LPAD (x, width [, pad_string]);

Заполняет x пробелами слева, чтобы довести общую длину строки до ширины символов.

11

LTRIM (x [, trim_string]);

Обрезает символы слева от x .

12

NANVL (x, значение);

Возвращает значение, если x соответствует специальному значению NaN (не число), в противном случае возвращается x .

13

NLS_INITCAP (х);

То же, что и функция INITCAP, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

14

NLS_LOWER (x);

То же, что и функция LOWER, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

15

NLS_UPPER (х);

То же, что и функция UPPER, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

16

NLSSORT (х);

Изменяет метод сортировки символов. Должен быть указан перед любой функцией NLS; в противном случае будет использоваться сортировка по умолчанию.

17

NVL (x, значение);

Возвращает значение, если x равно нулю; в противном случае возвращается x.

18

NVL2 (x, значение1, значение2);

Возвращает значение1, если х не ноль; если x нуль, значение2 возвращается.

19

REPLACE (x, search_string, replace_string);

Ищет x для search_string и заменяет его на replace_string.

20

RPAD (x, width [, pad_string]);

Колодки х справа.

21

RTRIM (x [, trim_string]);

Обрезает х справа.

22

SOUNDEX (x);

Возвращает строку, содержащую фонетическое представление x .

23

SUBSTR (x, start [, length]);

Возвращает подстроку x, которая начинается в позиции, указанной в start. Дополнительная длина для подстроки может быть предоставлена.

24

SUBSTRB (х);

То же, что SUBSTR, за исключением того, что параметры выражаются в байтах вместо символов для однобайтовых систем символов.

25

TRIM ([trim_char FROM) x);

Обрезает символы слева и справа от x .

26

ВЕРХНИЙ (х);

Преобразует буквы в x в верхний регистр и возвращает эту строку.

ASCII , (х);

Возвращает значение ASCII символа x.

CHR , (х);

Возвращает символ со значением ASCII x.

КОНКАТ (х, у);

Объединяет строки x и y и возвращает добавленную строку.

INITCAP (х);

Преобразует начальную букву каждого слова в x в верхний регистр и возвращает эту строку.

INSTR (x, find_string [, start] [, вхождение]);

Ищет find_string в x и возвращает позицию, в которой это происходит.

INSTRB (х);

Возвращает расположение строки в другой строке, но возвращает значение в байтах.

ДЛИНА (х);

Возвращает количество символов в х.

LENGTHB (х);

Возвращает длину строки символов в байтах для однобайтового набора символов.

НИЖНИЙ (х);

Преобразует буквы в x в нижний регистр и возвращает эту строку.

LPAD (x, width [, pad_string]);

Заполняет x пробелами слева, чтобы довести общую длину строки до ширины символов.

LTRIM (x [, trim_string]);

Обрезает символы слева от x .

NANVL (x, значение);

Возвращает значение, если x соответствует специальному значению NaN (не число), в противном случае возвращается x .

NLS_INITCAP (х);

То же, что и функция INITCAP, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

NLS_LOWER (x);

То же, что и функция LOWER, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

NLS_UPPER (х);

То же, что и функция UPPER, за исключением того, что она может использовать другой метод сортировки, указанный в NLSSORT.

NLSSORT (х);

Изменяет метод сортировки символов. Должен быть указан перед любой функцией NLS; в противном случае будет использоваться сортировка по умолчанию.

NVL (x, значение);

Возвращает значение, если x равно нулю; в противном случае возвращается x.

NVL2 (x, значение1, значение2);

Возвращает значение1, если х не ноль; если x нуль, значение2 возвращается.

REPLACE (x, search_string, replace_string);

Ищет x для search_string и заменяет его на replace_string.

RPAD (x, width [, pad_string]);

Колодки х справа.

RTRIM (x [, trim_string]);

Обрезает х справа.

SOUNDEX (x);

Возвращает строку, содержащую фонетическое представление x .

SUBSTR (x, start [, length]);

Возвращает подстроку x, которая начинается в позиции, указанной в start. Дополнительная длина для подстроки может быть предоставлена.

SUBSTRB (х);

То же, что SUBSTR, за исключением того, что параметры выражаются в байтах вместо символов для однобайтовых систем символов.

TRIM ([trim_char FROM) x);

Обрезает символы слева и справа от x .

ВЕРХНИЙ (х);

Преобразует буквы в x в верхний регистр и возвращает эту строку.

Давайте теперь потренируемся на нескольких примерах, чтобы понять концепцию –

Пример 1

DECLARE 
   greetings varchar2(11) := 'hello world'; 
BEGIN 
   dbms_output.put_line(UPPER(greetings)); 
    
   dbms_output.put_line(LOWER(greetings)); 
    
   dbms_output.put_line(INITCAP(greetings)); 
    
   /* retrieve the first character in the string */ 
   dbms_output.put_line ( SUBSTR (greetings, 1, 1)); 
    
   /* retrieve the last character in the string */ 
   dbms_output.put_line ( SUBSTR (greetings, -1, 1)); 
    
   /* retrieve five characters,  
      starting from the seventh position. */ 
   dbms_output.put_line ( SUBSTR (greetings, 7, 5)); 
    
   /* retrieve the remainder of the string, 
      starting from the second position. */ 
   dbms_output.put_line ( SUBSTR (greetings, 2)); 
     
   /* find the location of the first "e" */ 
   dbms_output.put_line ( INSTR (greetings, 'e')); 
END; 
/ 

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –

HELLO WORLD 
hello world 
Hello World 
h 
d 
World 
ello World 
2  

PL/SQL procedure successfully completed.

Пример 2

DECLARE 
   greetings varchar2(30) := '......Hello World.....'; 
BEGIN 
   dbms_output.put_line(RTRIM(greetings,'.')); 
   dbms_output.put_line(LTRIM(greetings, '.')); 
   dbms_output.put_line(TRIM( '.' from greetings)); 
END; 
/

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –