Иногда в PL/SQL требуется, чтобы обрабатываемая строка имела фиксированный размер. Функции LPAD
и RPAD
дополняют строку пробелами (или другие символы) слева или справа до заданной длины. В следующем примере эти две функции выводят список имен в два столбца, причем левый столбец выравнивается по левому краю, а правый — по правому краю:
DECLARE a VARCHAR2(30) := 'Jeff'; b VARCHAR2(30) := 'Eric'; c VARCHAR2(30) := 'Andrew'; d VARCHAR2(30) := 'Aaron'; e VARCHAR2(30) := 'Matt'; f VARCHAR2(30) := 'Joe'; BEGIN DBMS_OUTPUT.PUT_LINE( RPAD(a,10) || LPAD(b,10) ); Результат: Jeff Eric Andrew Aaron Matt Joe
По умолчанию строки дополняются пробелами. При желании можно задать используемый символ в третьем аргументе. Приведите строки кода к следующему виду:
DBMS_OUTPUT.PUT_LINE( RPAD(a,10,'.') || LPAD(b,10,'.') ); DBMS_OUTPUT.PUT_LINE( RPAD(c,10,'.') || LPAD(d,10,'.') ); DBMS_OUTPUT.PUT_LINE( RPAD(e,10,'.') || LPAD(f,10,'.') );
Результат будет выглядеть так:
Jeff............Eric Andrew.........Aaron Matt.............Joe
В качестве заполнителя даже может использоваться целая строка:
DBMS_OUTPUT.PUT_LINE( RPAD(a,10,'-~-') || LPAD(b,10,'-~-') ); DBMS_OUTPUT.PUT_LINE( RPAD(c,10,'-~-') || LPAD(d,10,'-~-') ); DBMS_OUTPUT.PUT_LINE( RPAD(e,10,'-~-') || LPAD(f,10,'-~-') );
Новая версия результата:
Jeff-~--~--~--~-Eric Andrew-~---~--~Aaron Matt-~--~--~--~--Joe
Символы или строки-заполнители размещаются слева направо — всегда, даже при использовании функции RPAD
. Чтобы убедиться в этом, достаточно повнимательнее присмотреться к 10-символьному «столбцу» с именем Joe.
При использовании LPAD
и RPAD
необходимо учитывать возможность того, что длина некоторых входных строк изначально может оказаться больше нужной ширины (или равной ей). Для примера попробуем уменьшить ширину столбца до четырех символов:
DBMS_OUTPUT.PUT_LINE( RPAD(a,4) || LPAD(b,4) ); DBMS_OUTPUT.PUT_LINE( RPAD(c,4) || LPAD(d,4) ); DBMS_OUTPUT.PUT_LINE( RPAD(e,4) || LPAD(f,4) );
Теперь результат будет выглядеть так:
JeffEric AndrAaro Matt Joe
Обратите особое внимание на вторую строку: имена «Andrew
» и «Aaron
» усечены до четырех символов.