Работа со строками в основном сводится к вызову многочисленных встроенных строковых функций Oracle PL/SQL, поэтому я рекомендую хотя бы в общих чертах познакомиться с функциями, предлагаемыми Oracle. В моем блоге вы узнаете, как записывать строковые константы, а также познакомитесь с важнейшими строковыми функциями.
Один из способов загрузки строковых данных в программу PL/SQL заключается в выполнении инструкции SELECT
, возвращающей значения строкового типа. Также возможно определение строковых констант непосредственно в коде. Строковые константы заключаются в одинарные кавычки:
'Brighten the corner where you are.'
Если одинарную кавычку потребуется включить в строковую константу, ее можно продублировать:
'Aren''t you glad you''re learning PL/SQL with O''Reilly?'
Другое, более элегантное решение основано на определении пользовательских ограничителей строк. Для этой цели используется префикс q
(также допускается использование символа Q верхнего регистра). Пример:
q'!Aren't you glad you're learning PL/SQL with O'Reilly?!'
или:
q'{Aren't you glad you're learning PL/SQL with O'Reilly?}'
При использовании префикса q вся строка должна быть заключена в одиночные кавычки. Символ, следующий за первой кавычкой (восклицательный знак в первом из двух примеров), становится ограничителем строки. Таким образом, первая строка с префиксом q состоит из всех символов между двумя восклицательными знаками.
Если начальным ограничителем является символ [, {, < или (, то конечным ограничителем должен быть символ ], }, > или ) соответственно.
Как правило, в представлении строковых констант используется набор символов базы данных. Если константа присваивается переменной NCHAR
или NVARCHAR2
, она неявно преобразуется в символы национального набора. Oracle выполняет такие преобразования по мере необходимости, и программисту об этом заботиться не нужно. Если же потребуется явно указать, что строковая константа задается в национальном наборе символов, поставьте перед ней префикс n
:
n'Pils vom fa?: 1€'
Чтобы при определении строки в национальном наборе некоторые символы задавались числовыми кодами Юникода, используйте префикс u
:
u'Pils vom fa\00DF: 1\20AC'
Здесь 00DF — код немецкой буквы «?
», а 20AC — код знака евро. Полученная константа не отличается от предшествующего примера с префиксом n
.
Значение строковой константы можно сохранить в переменной оператором присваивания:
DECLARE jonathans_motto VARCHAR2(50); BEGIN jonathans_motto := 'Brighten the corner where you are.'; END;
Константы также можно передавать встроенным функциям. Например, следующий вызов функции LENGTH
определяет количество символов в переданной строке:
BEGIN DBMS_OUTPUT.PUT_LINE( LENGTH('Brighten the corner where you are.') ); END;
При выполнении этого кода мы узнаем, что строка состоит из 34 символов.
При выполнении кода PL/SQL в SQL*Plus или SQL Developer часто возникают проблемы с символом &. Дело в том, что в этих программах указанный символ используется в качестве префикса при замене, и, встретив его, SQL*Plus запрашивает значение переменной. Например:
SQL> BEGIN 2 DBMS_OUTPUT.PUT_LINE ('Generating & saving test data.'); 3 END; 4 / Enter value for saving:
У проблемы существует несколько решений. Одно из них, хорошо подходящее для SQL*Plus и SQL Developer, заключается в выполнении команды SET DEFINE OFF
, отключающей подстановку переменных. Другие решения приводятся в книге Джонатана Генника «Oracle SQL*Plus: The Definitive Guide» (издательство O’Reilly).