Экспорт данных в плоский файл - фиксированная длина столбца, если числовое поле равно нулю

У меня есть временная таблица, содержащая данные приложения, которые я хочу экспортировать в плоский файл с фиксированными позициями. Я борюсь с тем, что некоторые значения в числовом столбце account_numbers равны нулю. Во время экспорта строки с нулевыми значениями не заменяются пробелом, а устанавливаются как нулевые. Я подозревал, что мне нужно преобразовать столбец в char перед заполнением, но, похоже, это не решает проблему. Что мне не хватает?

RPAD(To_char(i.Account_Number),11,' ')

Создать данные для вставки таблицы:

create table V_APPLICATION_INSTANCE
(
  account_number NUMBER(19),
  created_date   TIMESTAMP(6),
  decision       VARCHAR2(40),
  name           VARCHAR2(40)
);

insert into V_APPLICATION_INSTANCE (ACCOUNT_NUMBER, CREATED_DATE, DECISION, NAME)
values (1679669315, '09-SEP-16 10.43.51.932000 AM', 'APPROVED', 'TAF2214');

insert into V_APPLICATION_INSTANCE (ACCOUNT_NUMBER, CREATED_DATE, DECISION, NAME)
values (null, '31-AUG-16 12.41.53.331000 PM', 'APPROVED', 'TAF2234');

insert into V_APPLICATION_INSTANCE (ACCOUNT_NUMBER, CREATED_DATE, DECISION, NAME)
values (1528296849, '02-SEP-16 12.00.32.008000 PM', 'APPROVED', 'TAF1234');

insert into V_APPLICATION_INSTANCE (ACCOUNT_NUMBER, CREATED_DATE, DECISION, NAME)
values (null, '31-AUG-16 05.05.30.433000 PM', 'APPROVED', 'TAF1234');

Экспорт в плоский файл:

Declare
  pFile Utl_File.file_type;
  fLine Varchar2(1024);

Begin

  pFile := UTL_FILE.fopen('USER_TEMP', 'APPLIC_EXPORT.txt', 'w');

  For i in (Select V.ACCOUNT_NUMBER ,V.CREATED_DATE,TRIM(V.DECISION) DECISION,TRIM(V.NAME) NAME From V_APPLICATION_INSTANCE V) 
  Loop

    fLine := RPAD(i.Account_Number,11,' ') || ' ' || RPAD(i.Created_Date,30,' ') || ' ' ||
             RPAD(i.Decision,25,' ') || ' ' || RPAD(i.Name,50,' ');
    UTL_FILE.put_line(pFile, convert(fLine, 'WE8ISO8859P1', 'UTF8'));

  End Loop;

  UTL_FILE.fclose(pFile);
End;

Вывод:

 ===================================================== == == == =========== == == == == == == == == == ===== 
  1679669315  09-SEP-16 10.43.51.932000 AM   APPROVED              TAF2214                                   
   31-AUG-16 12.41.53.331000 PM   APPROVED                 TAF2234                                   
  1528296849  02-SEP-16 12.00.32.008000 PM   APPROVED              TAF1234                                   
   31-AUG-16 05.05.30.433000 PM   APPROVED                 TAF1234                                   
 ===================================================== == == == =========== == == == == == == == == == =====

Ожидаемый результат:

 ===================================================== == == == =========== == == == == == == == == == ===== 
  1679669315  09-SEP-16 10.43.51.932000 AM   APPROVED              TAF2214                                   
              31-AUG-16 12.41.53.331000 PM   APPROVED              TAF2234                                   
  1528296849  02-SEP-16 12.00.32.008000 PM   APPROVED              TAF1234                                   
              31-AUG-16 05.05.30.433000 PM   APPROVED              TAF1234                                   
 ===================================================== == == == =========== == == == == == == == == == =====

Спасибо


person MrM    schedule 15.09.2016    source источник


Ответы (1)


Извините, что отвечаю на свой вопрос, но я наконец нашел решение. Пришлось заменить ноль пробелом

rpad (nvl (TO_CHAR (i.account_number), ' '), 11, ' ')

person MrM    schedule 15.09.2016