Существует два способа объединения строк в PL/SQL: функция CONCAT
и оператор конкатенации, представленный двумя вертикальными чертами ||. В практическом программировании намного чаще применяется оператор конкатенации. Для чего нужны два механизма, спросите вы? Дело в том, что при трансляции кода между серверами, использующими кодировки ASCII
и EBCDIC
, могут возникнуть проблемы с символами вертикальной черты, а на некоторых клавиатурах для ввода этих символов приходится проявлять настоящие чудеса ловкости. Если вам неудобно работать с вертикальными чертами, используйте функцию CONCAT
, которая получает два аргумента:
CONCAT (строка1, строка2)
Функция CONCAT
всегда присоединяет строку2 в конец строки1 и возвращает результат. Если одна из двух строк равна NULL
, функция CONCAT
возвращает отличный от NULL
аргумент. Если обе строки равны NULL
, то CONCAT
возвращает NULL
. Если входные строки не относятся к типу CLOB
, итоговая строка будет относиться к типу VARCHAR2
. Если одна или обе входные строки относятся к типу CLOB
, то в результате конкатенации будет получен тип CLOB
. Если одна из строк относится к типу NCLOB
, итоговая строка тоже относится к типу NCLOB
. В общем случае возвращаемое значение относится к типу, сохраняющему максимум полезной информации. Несколько примеров использования CONCAT
:
CONCAT ('abc', 'defg') --> 'abcdefg' CONCAT (NULL, 'def') --> 'def' CONCAT ('ab', NULL) --> 'ab' CONCAT (NULL, NULL) --> NULL
Обратите внимание: функция позволяет объединять только две строки, а оператор конкатенации — сразу несколько строк. Пример:
DECLARE x VARCHAR2(100); BEGIN x := 'abc' || 'def' || 'ghi'; DBMS_OUTPUT.PUT_LINE(x); END;
Результат:
abcdefghi
Для выполнения аналогичной конкатенации с использованием CONCAT
приходится задействовать вложенные вызовы:
x := CONCAT(CONCAT('abc','def'),'ghi');
Как видите, оператор || не только удобнее CONCAT
, но и программный код получается намного более понятным.