2015-01-07 1 views
0

Я пытаюсь создать управляющий файл для сценария SQL * Loader. У меня есть столбец даты, который определяется как NOT NULL. Мне нужно настроить сценарий на использование текущей даты, если входящее значение из файла пустым. Я попробовал несколько способов - некоторые примеры ниже - но я все время становлюсь ниже ошибки при запуске sql-загрузчика, но формат работает, если я делаю выбор из двойногоSQL * Loader - использование sysdate, если входящее значение пустое

Как мне настроить его в SQLLoader?

PROGRAM_CHANGE_TS  POSITION(37:47) DATE "decode(length(trim(:PROGRAM_CHANGE_TS)), 11, to_date(:PROGRAM_CHANGE_TS,'yymmddHH24:MI'),to_date(sysdate,'yymmddHH24:MI'))", 
    PROGRAM_CHANGE_TS  POSITION(37:47) DATE "NVL(Decode(:PROGRAM_CHANGE_TS,'00/00/0000',TO_DATE('01/01/2010','dd/mm/yyyy'),TO_DATE(:PROGRAM_CHANGE_TS,'dd/mm/yyyy')),TO_DATE('01/01/2010','dd/mm/yyyy'))", 

оракул расшифровывает пример ORA-00907: отсутствует правая скобка

select decode(length(trim(:PROGRAM_CHANGE_TS)), 11, to_date(:PROGRAM_CHANGE_TS,'yymmddHH24:MI'),to_date(sysdate,'yymmddHH24:MI')) from dual 

или

select NVL(Decode(:PROGRAM_CHANGE_TS,'00/00/0000',TO_DATE('01/01/2010','dd/mm/yyyy'),TO_DATE(:PROGRAM_CHANGE_TS,'dd/mm/yyyy')),TO_DATE('01/01/2010','dd/mm/yyyy')) from dual 

работы

Какие изменения мне нужно сделать, чтобы использовать его с SQL файл управления загрузчиком?

ответ

0

Вы используете to_date в ctl-файле, поэтому удалите явный спецификатор DATE.

Кроме того, вам не нужно использовать Используйте decode и length, nvl вместе с trim является путь.

И, наконец, sysdate уже является датой, поэтому вам не нужно явно преобразовывать его в дату с to_date.

Следующие должны работать (не проверено):

PROGRAM_CHANGE_TS POSITION(37:47) "nvl(to_date(trim(:PROGRAM_CHANGE_TS),'yymmddHH24:MI'),sysdate)", 
+0

Извините, добавленные комментарии выше по ошибке. Я протестировал этот NVL. Благодарю. Я использовал часть NVL, и теперь она идет дальше с точки зрения получения ошибки ORA-00907. Эта ошибка теперь устранена. Я все еще получаю ошибку ниже, когда входящие данные являются пробелами - столбец PROGRAM_CHANGE_TS. ORA-01858: был найден нечисловой символ, где ожидалось числовое число. Как я могу разрешить эту часть? Также один другой вопрос - непустые данные имеют 2-значный год, поэтому он вводится как 20YY для всех, как я могу изменить это так, что что-нибудь более 70 будет переведено на 19YY? – adbdkb

+0

Мы можем помочь вам лучше, если вы разместили инструкцию 'create table' свой файл' * .ctl' и несколько записей выборочных данных. –

0

Мне нужно установить, подлинник использовать текущую дату, если входящее значение из файла пустое.

Если вы NULL значения для столбца даты, а затем просто использовать NVL функции для загрузки SYSDATE вместо этого.

PROGRAM_CHANGE_TS POSITION(37:47) DATE "NVL(:PROGRAM_CHANGE_TS, SYSDATE)"

Не смущайтесь между BLANK и NULL. 00/00/0000 не является ни пустым, ни нулевым. Если вы получаете 00/00/0000 в качестве значения, используйте DECODE.

PROGRAM_CHANGE_TS POSITION(37:47) DATE "DECODE(:PROGRAM_CHANGE_TS, '00/00/0000', SYSDATE, :PROGRAM_CHANGE_TS)"

+0

Спасибо. Я использовал часть NVL, и теперь она идет дальше с точки зрения получения ошибки ORA-00907. Эта ошибка теперь устранена. Я все еще получаю следующую ошибку, когда входящие данные являются пробелами - 'column PROGRAM_CHANGE_TS.ORA-01858: был найден нечисловой символ, где ожидалось число. Как я могу разрешить эту часть? – adbdkb

+0

Также еще один вопрос - непустые данные имеют 2-значный год, поэтому он вводится как 20YY для всех, как я могу изменить это так, что что-нибудь выше 70 будет переведено на 19YY? – adbdkb

+0

Используйте формат 'RR' вместо' YY'. 'select to_date ('01/01/72 ',' dd/mm/rr ') из double' –

Смежные вопросы